observations_in_bbox
Pack: airnow · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)
No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/observations_in_bbox for the schema, then POST the same URL with its arguments for the data.
Hourly EPA AirNow monitoring-site observations inside a bounding box for a span of UTC hours (max 24 hours per call): per site and hour, the AQI for ozone, PM2.5, PM10 and NO2 and the measured concentrations for PM2.5, ozone, NO2, CO, SO2 and PM10. Specify pollutants as comma-separated codes (“OZONE,PM25,PM10,CO,NO2,SO2”). bbox format: “minLon,minLat,maxLon,maxLat”; dates as “YYYY-MM-DDTHH” (UTC). Answers “which monitors in the LA basin exceeded AQI 100 yesterday”.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
bbox | string | yes | minLon,minLat,maxLon,maxLat |
start_date | string | yes | YYYY-MM-DDTHH (UTC hour, inclusive) |
end_date | string | yes | YYYY-MM-DDTHH (UTC hour, inclusive; at most 23 hours after start_date) |
parameters | string | no | Comma-separated pollutants (default: OZONE,PM25,PM10; also NO2,CO,SO2) |
data_type | string | no | A (AQI only) | C (concentration only) | B (both, default) |
verbose | boolean | no | Include site status, EPA region, elevation, data source agency and reporting areas |
Example call
Arguments
{
"bbox": "-74.3,40.5,-73.7,40.95",
"start_date": "2026-10-07T12",
"end_date": "2026-10-07T17"
}
curl
curl -X POST https://gateway.pipeworx.io/airnow/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"observations_in_bbox","arguments":{"bbox":"-74.3,40.5,-73.7,40.95","start_date":"2026-10-07T12","end_date":"2026-10-07T17"}}}'
TypeScript (@pipeworx/sdk)
import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();
const result = await pipeworx.call('observations_in_bbox', {
"bbox": "-74.3,40.5,-73.7,40.95",
"start_date": "2026-10-07T12",
"end_date": "2026-10-07T17"
});
More examples
{
"bbox": "-118.5,33.9,-118.0,34.2",
"start_date": "2026-10-07T18",
"end_date": "2026-10-07T20",
"parameters": "OZONE,PM25,NO2",
"data_type": "A",
"verbose": true
}
Response shape
Always returns: bbox, count, observations
| Field | Type | Description |
|---|---|---|
bbox | string | Bounding box queried (minLon,minLat,maxLon,maxLat) |
count | integer | Number of observations returned |
observations | array | Historical AQI observations in bounding box |
Full JSON Schema
{
"type": "object",
"properties": {
"bbox": {
"type": "string",
"description": "Bounding box queried (minLon,minLat,maxLon,maxLat)"
},
"count": {
"type": "integer",
"description": "Number of observations returned"
},
"observations": {
"type": "array",
"description": "Historical AQI observations in bounding box",
"items": {
"type": "object",
"properties": {
"observed_date": {
"type": [
"string",
"null"
],
"description": "Date observed (YYYY-MM-DD)"
},
"hour": {
"type": [
"integer",
"null"
],
"description": "Hour observed (0-23)"
},
"utc": {
"type": [
"string",
"null"
],
"description": "UTC timestamp"
},
"site": {
"type": [
"string",
"null"
],
"description": "Monitoring site name"
},
"agency": {
"type": [
"string",
"null"
],
"description": "Reporting agency name"
},
"aqs_code": {
"type": [
"string",
"null"
],
"description": "Full AQS code identifier"
},
"latitude": {
"type": [
"number",
"null"
],
"description": "Site latitude"
},
"longitude": {
"type": [
"number",
"null"
],
"description": "Site longitude"
},
"pollutant": {
"type": [
"string",
"null"
],
"description": "Pollutant parameter name"
},
"aqi": {
"type": [
"integer",
"null"
],
"description": "Air Quality Index value"
},
"category": {
"type": [
"integer",
"null"
],
"description": "AQI category numeric code"
},
"value": {
"type": [
"number",
"null"
],
"description": "Pollutant concentration value"
},
"unit": {
"type": [
"string",
"null"
],
"description": "Unit of measurement"
}
}
}
}
},
"required": [
"bbox",
"count",
"observations"
]
}
Connect
Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:
{
"mcpServers": {
"pipeworx": {
"url": "https://pipeworx.io/mcp"
}
}
}
Connect to just the airnow pack
{
"mcpServers": {
"airnow": {
"url": "https://gateway.pipeworx.io/airnow/mcp"
}
}
}
See Getting Started for client-specific install steps.