PM2.5 air pollution by city: worst-first rankings, current air and daily history.
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: the latest hourly value, its 24-hour, 7-day, 30-day and year-to-date averages with its rank among all measured cities, the US EPA category, how it compares with the WHO guideline, and the "why it ranks here" notes (patterns in its own history and nearby fire, smoke and volcano evidence, named as likely causes, never confirmed), and the local hours its air was usually worst and cleanest over the last 30 days. Each measured city's trust says what stands behind it: checked (reference monitors at 2+ sites), one (a single reference site) or low (3+ low-cost sensors). Cities without a monitor get a model estimate, labelled as one, plus few_sensors when one or two low-cost sensors measure there (not ranked). No forecasts.
City as its page path ("us/los-angeles"), a SmogRank URL, or a name ("Lahore", "Delhi, India"). find_city lists the paths.
PM2.5 now in a city: the latest hourly value, its 24-hour, 7-day, 30-day and year-to-date averages with its rank among all measured cities, the US EPA category, how it compares with the WHO guideline, and the "why it ranks here" notes (patterns in its own history and nearby fire, smoke and volcano evidence, named as likely causes, never confirmed), and the local hours its air was usually worst and cleanest over the last 30 days. Each measured city's trust says what stands behind it: checked (reference monitors at 2+ sites), one (a single reference site) or low (3+ low-cost sensors). Cities without a monitor get a model estimate, labelled as one, plus few_sensors when one or two low-cost sensors measure there (not ranked). No forecasts.
| Argument | Type | Description |
|---|---|---|
| city* | string | City as its page path ("us/los-angeles"), a SmogRank URL, or a name ("Lahore", "Delhi, India"). find_city lists the paths. |
{
"type": "object",
"required": [
"city"
],
"properties": {
"city": {
"type": "string",
"description": "City as its page path (\"us/los-angeles\"), a SmogRank URL, or a name (\"Lahore\", \"Delhi, India\"). find_city lists the paths."
}
}
}A measured city's daily mean PM2.5 (its local calendar days, µg/m³) and its daily rank, between two dates (up to 400 days; default the last 30), with monthly means.
| Argument | Type | Description |
|---|---|---|
| to | string | YYYY-MM-DD, default yesterday |
| city* | string | City as its page path ("us/los-angeles"), a SmogRank URL, or a name ("Lahore", "Delhi, India"). find_city lists the paths. |
| from | string | YYYY-MM-DD |
{
"type": "object",
"required": [
"city"
],
"properties": {
"to": {
"type": "string",
"description": "YYYY-MM-DD, default yesterday"
},
"city": {
"type": "string",
"description": "City as its page path (\"us/los-angeles\"), a SmogRank URL, or a name (\"Lahore\", \"Delhi, India\"). find_city lists the paths."
},
"from": {
"type": "string",
"description": "YYYY-MM-DD"
}
}
}Search SmogRank's cities by name, or find the nearest ones to a point. Returns each city's path for the other tools, whether it is measured by ground monitors (ranked) or only estimated from a model, and its page.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude, with lon, instead of a name. |
| lon | number | |
| limit | integer | |
| query | string | City name, optionally with region or country: "Springfield, Illinois". |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"description": "Latitude, with lon, instead of a name."
},
"lon": {
"type": "number"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"description": "City name, optionally with region or country: \"Springfield, Illinois\"."
}
}
}The ranking of measured cities by average PM2.5, worst first: a rolling window (24h, 7d, 30d, year to date) or a past period (a day 2026-09-30, a week 2026-W40, a month 2026-09, a year 2025). Optionally one country.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| order | string | |
| period | string | A past period instead of a window: YYYY-MM-DD, YYYY-Www, YYYY-MM or YYYY. |
| window | string | |
| country | string | ISO country code, e.g. IN. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"order": {
"enum": [
"worst",
"cleanest"
],
"type": "string",
"default": "worst"
},
"period": {
"type": "string",
"description": "A past period instead of a window: YYYY-MM-DD, YYYY-Www, YYYY-MM or YYYY."
},
"window": {
"enum": [
"24h",
"7d",
"30d",
"year"
],
"type": "string",
"default": "24h"
},
"country": {
"type": "string",
"description": "ISO country code, e.g. IN."
}
}
}