Environmental Sensor Stations Within a Radius: Air Quality, Temperature, Humidity, Noise (openSenseMap)
opensensemap/list-boxes
Finds environmental sensor stations (senseBoxes) of the openSenseMap citizen-science network within 1 to 5000 metres of a latitude and longitude, optionally only indoor, outdoor, mobile or unknown exposure. Returns at most 50 stations, the most recently active first, each with its id, name, exposure, model, position, last measurement time and its sensors (what they measure, unit and hardware), plus the total number found. Data from openSenseMap (opensensemap.org). Served by Eden Engine; not an official openSenseMap product.
Price
$0.0026 per call
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
Data from openSenseMap (opensensemap.org), contributed by its community. Served by Eden Engine; not an official openSenseMap product.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "opensensemap/list-boxes" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "opensensemap/list-boxes" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "opensensemap/list-boxes", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "opensensemap/list-boxes", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0026 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"exposure": {
"enum": [
"indoor",
"outdoor",
"mobile",
"unknown"
],
"type": "string",
"description": "Only stations with this exposure: indoor, outdoor, mobile or unknown. Omit for all."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the search centre in degrees, -90 to 90."
},
"radius_m": {
"type": "integer",
"default": 1000,
"maximum": 5000,
"minimum": 1,
"description": "Search radius in metres, 1 to 5000. Default 1000."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the search centre in degrees, -180 to 180."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"found",
"returned",
"truncated",
"boxes"
],
"properties": {
"boxes": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"sensors"
],
"properties": {
"id": {
"type": "string",
"description": "Station id; pass it to get-box."
},
"name": {
"type": [
"string",
"null"
],
"description": "Station name chosen by its owner. Null when the owner left it blank."
},
"model": {
"type": [
"string",
"null"
],
"description": "Station model, for example luftdaten_sds011_bme280 or homeV2Wifi. Null when not set."
},
"sensors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Sensor id; pass it to sensor-measurements."
},
"unit": {
"type": [
"string",
"null"
],
"description": "Unit of the sensor's values. Null when the owner left it blank."
},
"title": {
"type": [
"string",
"null"
],
"description": "What the sensor measures, as named by the station owner (often German, for example Temperatur). Null when the owner left it blank."
},
"last_value": {
"type": [
"number",
"null"
],
"description": "The sensor's latest value. Null when the list endpoint is used (it carries no values) or the value is not numeric."
},
"sensor_type": {
"type": [
"string",
"null"
],
"description": "The hardware, for example SDS011 or BME280. Null when the owner left it blank."
},
"last_value_at": {
"type": [
"string",
"null"
],
"description": "Time of the latest value, UTC ISO 8601. Null when the list endpoint is used or the sensor never reported."
}
},
"additionalProperties": true
},
"description": "The station's sensors, at most 30."
},
"altitude": {
"type": [
"number",
"null"
],
"description": "Altitude in metres. Null when not given."
},
"exposure": {
"type": [
"string",
"null"
],
"description": "indoor, outdoor, mobile or unknown. Null when not set."
},
"latitude": {
"type": [
"number",
"null"
],
"description": "Latitude in degrees. Null when the station has no location."
},
"longitude": {
"type": [
"number",
"null"
],
"description": "Longitude in degrees. Null when the station has no location."
},
"created_at": {
"type": [
"string",
"null"
],
"description": "When the station was registered, UTC ISO 8601. Null when not given."
},
"last_measurement_at": {
"type": [
"string",
"null"
],
"description": "Time of the station's latest measurement, UTC ISO 8601. Null when it never reported."
}
},
"additionalProperties": true
},
"description": "Stations, most recently active first."
},
"found": {
"type": "integer",
"description": "How many stations the platform returned for the search."
},
"returned": {
"type": "integer",
"description": "How many are listed in boxes (at most 50)."
},
"truncated": {
"type": "boolean",
"description": "True when found exceeds 50 and only the 50 most recently active are listed; narrow the radius or set exposure."
}
},
"description": "The bounded station list.",
"additionalProperties": true
}