CleanAirData
Server Details
Historical PM2.5 and Clean Air Score for US cities; copied records name their source city.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 3 tools
Each tool targets a distinct operation: get_city_air_quality returns one city's record, compare_cities compares two cities side-by-side, and rank_cities returns a ranked list. There is no overlap in purpose, and the descriptions clearly differentiate their outputs.
All tool names follow a consistent snake_case verb_noun pattern (compare_cities, get_city_air_quality, rank_cities). The verbs are distinct and predictable, making the set easy to navigate.
With only three tools, each serves a clear and necessary purpose: single-city lookup, two-city comparison, and ranking. The count is well-scoped for a read-only historical air quality dataset and avoids redundancy.
The set covers retrieval, comparison, and ranking, which are the core operations for this domain. However, there is no explicit tool to list all available cities or search by non-score criteria, which could force agents to rely on rank_cities for discovery and may leave minor gaps for arbitrary city lookups.
Available Tools
3 toolscompare_citiesCompare two citiesARead-onlyIdempotentInspect
Side-by-side historical records for two US cities with the difference in Clean Air Score and PM2.5. Warnings list any copied record. Each city is either an own_record (scored from its own data) or a copied_record (the full record of the nearest scored city, named in source_city, source_state and source_distance_miles). A copied_record describes the source city, not measurements taken in the named city. Values are historical annual data, not the current AQI.
| Name | Required | Description | Default |
|---|---|---|---|
| city_a | Yes | ||
| city_b | Yes | ||
| state_a | Yes | Two-letter state code. | |
| state_b | Yes | Two-letter state code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it discloses that warnings flag copied records, explains the own_record vs copied_record distinction, names the provenance fields (source_city, source_state, source_distance_miles), and states the critical gotcha that a copied_record describes the source city rather than measurements taken in the named city.
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 output is front-loaded with the core purpose, then adds the warning behavior, the copied-record semantics, and the historical-data caveat in descending order of importance. Every sentence carries information an agent cannot get from the schema or annotations; there is no filler.
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 and largely succeeds: it anticipates the key output fields (difference in Clean Air Score and PM2.5, warnings, own_record/copied_record, provenance fields) and the main interpretation trap. An agent has enough to call it and interpret the result correctly.
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 description coverage is only 50%: state_a and state_b are documented as two-letter codes, but city_a and city_b have no schema description at all. The description never compensates — it does not say whether city names must be exact strings, what format is expected, or how the two city parameters relate, so the coverage gap remains.
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 first sentence gives a specific verb and resource: side-by-side historical records for two US cities, including the exact metrics compared (Clean Air Score and PM2.5). The comparison scope inherently sets it apart from get_city_air_quality and rank_cities, but those siblings are never named, so routing relies on inference.
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 the verb 'compare' and the two-city input, and the closing caveat ('historical annual data, not the current AQI') warns against one misuse case. However, there is no explicit statement of when to pick this over the single-city or ranking tools, nor of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_city_air_qualityGet city air quality recordARead-onlyIdempotentInspect
Historical Clean Air Score, grade, latest annual PM2.5 mean, unhealthy-day share, trend and yearly PM2.5 for one US city. Each city is either an own_record (scored from its own data) or a copied_record (the full record of the nearest scored city, named in source_city, source_state and source_distance_miles). A copied_record describes the source city, not measurements taken in the named city. Values are historical annual data, not the current AQI.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City name, for example "Phoenix". | |
| state | Yes | Two-letter state code, for example "AZ". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds substantial semantics beyond them: the own_record vs copied_record distinction, that a copied_record describes the source city rather than the named city, and that values are historical annual data rather than current AQI. This is exactly the non-obvious behavior an agent needs.
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?
Three sentences, front-loaded with what is returned, then the record-type caveat and the historical-vs-current distinction. Dense but every sentence earns its place.
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 enumerates the return fields (score, grade, PM2.5 mean, unhealthy-day share, trend, yearly PM2.5) and explains the two record types. Nothing needed to interpret the result 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 100%, so city and state are fully documented in the schema. The description adds no syntax or format detail for the parameters, so the baseline 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?
States a specific verb+resource ('Historical Clean Air Score... for one US city') and enumerates the returned fields. The single-city scope implicitly distinguishes it from compare_cities and rank_cities, which operate across cities.
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 the single-city framing and the note that values are historical, not current AQI, which steers an agent away from one wrong use. But there is no explicit when-to-use or when-to-prefer-compare/rank guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_citiesRank cities by Clean Air ScoreARead-onlyIdempotentInspect
Cities with the highest Clean Air Score (cleanest first), optionally within one state. By default only cities with their own record are ranked, so copied records do not crowd the list. Each city is either an own_record (scored from its own data) or a copied_record (the full record of the nearest scored city, named in source_city, source_state and source_distance_miles). A copied_record describes the source city, not measurements taken in the named city. Values are historical annual data, not the current AQI.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of cities, default 10, maximum 25. | |
| state | No | Optional two-letter state code. | |
| own_records_only | No | Default true. Set false to include copied records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a read-only, idempotent, non-destructive query, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the own_record vs copied_record distinction, what a copied_record actually represents (source city, not measurements in the named city), and the caveat that values are historical annual data rather than current AQI.
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?
It is a single tight paragraph, front-loaded with the ranking semantics before the record-type caveat and the historical-data note. Sentences are dense but each carries distinct 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 carries the burden of conveying the return shape, and it does name the relevant fields (own_record/copied_record, source_city, source_state, source_distance_miles) and the data's temporal nature. It does not specify sort tie-breaking or pagination, a minor gap for this simple 3-param 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 description coverage is 100%, so a baseline of 3 applies, but the description goes further by explaining what 'copied records' are and why the own_records_only default exists — meaning the schema's one-line parameter note cannot convey alone. Limit and state get no extra prose, which keeps it below a 5.
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+resource ('Cities with the highest Clean Air Score (cleanest first)') plus a scope modifier (optionally one state), which clearly differentiates it from compare_cities and get_city_air_quality. It does not name those siblings explicitly, so it stops short of a 5.
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 implies when to use it (you want a ranked list, optionally filtered to a state, and by default excluding copied records), but it never says when to prefer it over compare_cities or get_city_air_quality. Usage is inferable rather than stated.
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.
3 tool updates
- First observed
compare_cities - First observed
get_city_air_quality - First observed
rank_cities
Related MCP Connectors
PM2.5 air pollution by city: worst-first rankings, current air and daily history.
Free, keyless real-time air quality (US AQI plus PM2.5, PM10, ozone, NO2, SO2, CO) for any city.
Toxics Release Inventory, Superfund sites, air quality data, and AQI
Federal environmental records near any US location, with dates and provenance; never a safety score.
Related MCP Servers
- 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

Find Sauna Plungeofficial
AlicenseAqualityAmaintenanceCold plunge, sauna and contrast-therapy venues across 23 US metros (548 venues). Every published water temperature and price is read from the venue's own pages and returned with its source URL, capture date and verbatim quote; every record carries the date it was last checked. Absent fields mean "not published", never zero. Five read-only tools: search_venues, get_venue, list_cities, get_city_stat5MIT- AlicenseAqualityDmaintenanceProvides access to EPA's Air Quality System API with 31 tools for querying air quality data, monitoring sites, and pollution measurements across the United States through natural language.31MIT
- AlicenseNot gradedqualityDmaintenanceLive real estate market data for 895 US metros. Ask your AI assistant about home prices, rental yields, investment health scores, migration trends, and affordability. Free tier covers top 50 markets (no account needed). Premium tier unlocks all 895 markets, HUD Fair Market Rents, side-by-side market comparison, and filtered market search.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.