SmogRank
Server Details
PM2.5 air pollution by city: worst-first rankings, current air and daily history.
- Status
- Healthy
- Uptime
- 100.0% over 25 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool has a distinct primary role: find_city for lookup, city_air for a single city's current/aggregate snapshot, city_history for a single city's daily series, rankings for cross-city comparisons. There is mild overlap since city_air reports a city's rank and 30-day averages while city_history returns daily ranks and monthly means over a date range, which could cause occasional misselection, but the descriptions differentiate them reasonably well.
Names mix conventions: city_air and city_history share a noun_noun prefix pattern, find_city uses verb_noun, and rankings is a bare plural noun. All are readable and snake_case, but there is no single predictable pattern an agent can generalize from.
Four tools is a small but sensible surface for a focused air-quality ranking service, and each covers a genuinely different access pattern (search, current snapshot, time series, leaderboard). It is on the lean side, with no tool for bulk multi-city comparison, but nothing feels redundant.
The core lifecycle is covered: discover a city, read its current conditions and rank, pull its history, and browse global rankings with optional country and period filters. Forecasts are explicitly out of scope and there is no way to query multiple cities' metrics in one call or list available countries, but these are minor workarounds rather than dead ends.
Available Tools
4 toolscity_airAir quality now in a cityARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City as its page path ("us/los-angeles"), a SmogRank URL, or a name ("Lahore", "Delhi, India"). find_city lists the paths. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds substantial context beyond them: trust tiers (checked/one/low), model estimates for unmonitored cities, the few_sensors qualifier, the 'not ranked' caveat, and that cause notes are 'named as likely causes, never confirmed'. That provenance and uncertainty disclosure is genuinely useful, though it doesn't mention rate limits or data latency beyond 'latest hourly'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening clause names the core metric up front, which is good front-loading, but the body is one very long comma-chained sentence packed with secondary details. Given there is no output schema the information largely earns its place, yet the structure could be broken into digestible statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return content, and it does: values, averages, rank, EPA category, WHO comparison, cause notes, worst/cleanest hours, and the trust/model-estimate labelling. An agent can interpret the response without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required parameter, and the schema itself explains the accepted forms (page path, SmogRank URL, or name) and points at find_city. The description adds no parameter guidance of its own, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pins down a specific resource and metric: 'PM2.5 now in a city' with latest hourly value plus averages and rankings. It is clearly a current-conditions reader rather than a historical or ranking tool, and it explicitly rules out forecasts. It never names its siblings (city_history, rankings) for contrast, so differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by content: use this for current city air quality with ranking context, and the schema points to find_city for path resolution. There is no explicit 'use this when... instead of city_history/rankings' routing, and no stated preconditions beyond the city identifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
city_historyA city's daily historyARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | YYYY-MM-DD, default yesterday | |
| city | Yes | City as its page path ("us/los-angeles"), a SmogRank URL, or a name ("Lahore", "Delhi, India"). find_city lists the paths. | |
| from | No | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: a hard 400-day cap, a default of the last 30 days, local-calendar-day semantics, and that monthly means are folded into the result — all useful for planning a call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads what is returned (daily mean PM2.5 and rank) and appends the scoping constraints. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey the return payload, and it does: daily mean, daily rank, and monthly means. Only the exact result structure/ordering is left unspecified, which is a minor gap for a read-only three-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description nonetheless adds meaning the schema does not carry — the 400-day maximum span and the default 30-day window — which helps an agent size the from/to arguments correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and payload — daily mean PM2.5 and daily rank for a city over a date range, plus monthly means. It is clearly a historical daily-data tool, but it never contrasts itself with the sibling city_air, so an agent must infer which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no sibling (city_air, rankings, find_city) is named as an alternative. Usage is only implied by the data described, leaving the agent to infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cityFind a cityARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude, with lon, instead of a name. | |
| lon | No | ||
| limit | No | ||
| query | No | City name, optionally with region or country: "Springfield, Illinois". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real substance beyond that: it discloses the returned provenance flag distinguishing ground-monitor (ranked) cities from model-only estimates, plus the page link. No output schema exists, so this disclosure carries extra weight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads the two search modes, the second enumerates return contents. No filler, no restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and four loosely-documented parameters, the description does the necessary work of explaining what comes back and why (path, ranked-vs-estimated, page). Minor gaps remain around ambiguous name matches and the default limit of 8, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% — lat and query are documented but lon and limit rely on type/default bounds alone. The description partially compensates by explaining the query-vs-coordinates dichotomy and hinting that lat/lon supply "instead of a name," but it adds no format, limit, or ambiguity-resolution detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search SmogRank's cities") and covers both operating modes: name lookup and nearest-to-point. It also frames the tool as the discovery entry point by noting it returns each city's path "for the other tools," which implicitly separates it from siblings like city_air and city_history, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly lays out the two selection modes — query by name vs. supply lat/lon for nearest cities — and signals that this is the lookup step preceding the per-city tools. It stops short of explicit when-not guidance or naming alternatives (e.g., "use rankings for score order").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rankingsMost (or least) polluted citiesBRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order | No | worst | |
| period | No | A past period instead of a window: YYYY-MM-DD, YYYY-Www, YYYY-MM or YYYY. | |
| window | No | 24h | |
| country | No | ISO country code, e.g. IN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description usefully adds that only 'measured' cities appear in the ranking and that results are ordered worst-first by default, but says nothing about result size (limit) or what a ranking entry contains. With annotations in place, that is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with a colon-delimited list; the core purpose and ordering are front-loaded before the parameter details. Efficient for the amount of information carried, though the embedded examples make it slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no output schema, the description covers time modes, ordering, and country filtering, but never addresses the limit parameter or what a ranking entry looks like (city plus PM2.5 value?). An agent can call it, but not fully predict the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40% (limit, order, and window carry no schema descriptions), so the description must compensate. It partially does: it gives example formats for period (2026-09-30, 2026-W40, 2026-09, 2025) and country, and states the worst-first default, but it never mentions the limit parameter or the cleanest option. The 'year to date' phrasing also sits awkwardly against the schema's 'year' enum value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (measured cities) and a specific metric (average PM2.5), and states the default ordering ('worst first'). This is clearly distinct from the ranking-free siblings city_air and city_history, though those siblings are never named to confirm the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It sets out the two time-selection modes (rolling window vs. past period) and the optional country filter, which implies usage but never states when to prefer this tool over city_air or city_history. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
city_air - First observed
city_history - First observed
find_city - First observed
rankings
Related MCP Connectors
PM2.5 of 300+ cities: now, history, forecast, rankings; 12 000 sensors with a quality rating.
China Air Quality MCP — nationwide hourly AQI from CNEMC (中国环境监测总站). 中国空气质量实时数据…
Historical PM2.5 and Clean Air Score for US cities; copied records name their source city.
Free, keyless real-time air quality (US AQI plus PM2.5, PM10, ozone, NO2, SO2, CO) for any city.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables real-time China nationwide air quality monitoring via CNEMC, with AQI, pollutant concentrations and levels, quality ratings, city rankings, and station-level details.445 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables querying real-time air quality index (AQI) data for Chinese cities, including PM2.5, PM10, and other pollutant information with health recommendations from the World Air Quality Index Project API.-
- AlicenseNot gradedqualityBmaintenanceEnables querying current weather, multi-day forecasts, and air quality (PM2.5, PM10, AQI) for Chinese cities, with fuzzy Chinese city-name resolution and a combined all-in-one lookup. Requires no API key or registration.MIT
- AlicenseAqualityCmaintenanceProvides real-time air quality data (US AQI, PM2.5, PM10, ozone, NO2, SO2, CO) for any city via natural language, using free Open-Meteo data and a single tool.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.