Reported issues for openaq-mcp-server
Pod holds 18 of 21 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.
Back to openaq-mcp-server.
Most discussed
bug(definitions): id inputs accept non-positive values — raw 422 on locationId, false no-coverage on parametersId
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
OS
macOS 26.1
Description
Six numeric id inputs are z.number().int() with no lower bound, and tools/list advertises "minimum": -9007199254740991 on each: locationId and parametersId on openaq_get_measurements and openaq_get_readings, and parametersId on openaq_find_locations and openaq_list_countries.
A non-positive…
Read the thread · 2026-08-13 · closed · 3 comments
feat(outputs): add station provider to get_readings, and provider plus timezone to get_measurements
Use case
Before citing a reading, a practitioner needs to know who operated the monitor, and they need the station timezone to read hourly and daily periods. Today openaq_get_readings returns timezone but no provider, and openaq_get_measurements returns neither, so each call needs a follow-up openaq://location/{id} read. The README's data-use section says openaq_get_readings returns provider, which isn't true yet.
Proposed behavior
Add the station's provider to location…
Read the thread · 2026-08-11 · closed · 3 comments
bug(openaq_get_measurements): date-only ranges clip station-local daily buckets and drop the last hour; missing intervals go unreported
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
OS
macOS 26.1
Description
OpenAQ computes daily rollups over each station's local calendar day (docs). openaq_get_measurements expands a date-only range to UTC bounds instead (T00:00:00Z to T23:59:59Z), so any station off UTC gets a partial-day bucket at each edge. That bucket's…
Read the thread · 2026-08-11 · closed · 3 comments
bug(openaq_dataframe_query): a capped result reports the cap as the full count and drops the truncation flag
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun 1.3.14
Transport
stdio
OS
macOS 26.1
Description
openaq_dataframe_query bounds its result only at the canvas defaultRowLimit of 10,000 rows, and
tells the caller nothing when it hits that bound.
Three defects at one call site. The handler runs instance.query(sql, { signal }) with no
rowLimit or preview, so 10,000 rows of an arbitrary projection can land in one response. The
DuckDB provider…
Read the thread · 2026-08-11 · closed · 3 comments
bug(format): content and structuredContent expose different row sets
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun 1.3.14
Transport
stdio
OS
macOS 26.1
Description
openaq_get_measurements and openaq_dataframe_query put more rows in structuredContent than in
content[]. #15 made the measurements text state the split honestly, but a text-only client and a
structured-content client still reason over different samples of the same call. The omitted rows are
response data, not display metadata.
Related: #15,…
Read the thread · 2026-08-11 · closed · 3 comments
bug(docker): multiarch install crashes in emulated scanner
Server version
0.4.0
mcp-ts-core version
0.13.9
Runtime
Bun
Runtime version
1.4.2
Transport
HTTP (Streamable HTTP)
OS
Docker Buildx on an arm64 host, targeting Linux amd64 and arm64.
Description
The Dockerfile runs the production dependency install on the target platform. For amd64 on an arm64 builder, Bun's Socket scanner subprocess aborts under QEMU, preventing the multiarch image from building. Native compilation succeeds.
Steps…
Read the thread · 2026-09-26 · closed · 2 comments
bug(openaq_get_measurements): canvas inference truncates fractional measurements
Server version
0.3.0
mcp-ts-core version
0.13.9
Runtime
Bun
Runtime version
Bun 1.4.2
Transport
stdio
Description
openaq_get_measurements stages measurements without an explicit schema. Inference from the first 100 rows can truncate later fractions or return numbers as strings, changing SQL results.
Steps to reproduce
- Supply 101 OpenAQ-shaped hourly buckets through a stub service: the first 100 have
valueand summary statistics0, the last…
Read the thread · 2026-09-26 · closed · 2 comments
bug(outputs): missing coordinates, country, and provider are rendered as 0,0, XX, and Unknown
Server version
0.1.10
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
Two output shapers replace missing upstream location data with made-up values:
openaq_find_locations(shapeLocation) turns a null latitude or longitude into0, a nullcountryinto{ code: "XX", name: "Unknown" }, and a nullproviderinto"Unknown".openaq_get_readingsturns a null latitude or longitude into…
Read the thread · 2026-09-24 · closed · 1 comment
Most recent
bug(openaq_get_measurements): first matching sensor wins even when it is a dormant duplicate
Server version
0.2.0
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
openaq_get_measurements resolves the station's sensor with the first entry whose parameter id matches (location.sensors.find(...) in get-measurements.tool.ts). Some stations carry more than one sensor for the same parameter, and the first can be dormant. The tool then pulls the dormant sensor's series and reports no data…
Read the thread · 2026-09-24 · open · 0 comments
bug(openaq_find_locations): coordinate search pages in id order, so page 1 is not the nearest stations
Server version
0.2.0
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
openaq_find_locations with coordinates returns OpenAQ's pages as they come and sorts each page by distance. OpenAQ's /v3/locations can only order by id, so page 1 is the lowest-id matching stations, not the nearest ones. The page description tells callers that "a near-me coordinates search should stay on page 1", which…
Read the thread · 2026-09-24 · open · 0 comments
bug(openaq_find_locations): iso rejects the -99 code openaq_list_countries returns for Dhekelia
Server version
0.1.10
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
openaq_list_countries relays every country OpenAQ lists, and its code field tells callers to pass it as iso to openaq_find_locations. OpenAQ lists Dhekelia (country id 7) with the placeholder code -99, which find_locations rejects because iso must be two characters. OpenAQ serves that code as a filter:…
Read the thread · 2026-09-24 · closed · 1 comment
bug(openaq_get_measurements): a limit that does not divide 5000 overshoots the pull ceiling the cap notice states
Server version
0.1.10
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
The pager checks allRows.length < MAX_ROWS before each fetch, then appends a whole page. So when limit does not divide 5,000, the pull ends above the ceiling. The staged canvas table and pulledCount report the true count, while the cap notice says Pull capped at 5000 rows, which contradicts them. The default `limit:…
Read the thread · 2026-09-22 · closed · 1 comment
bug(openaq_get_measurements): re-staging the same sensor on a reused canvas silently replaces the earlier table
Server version
0.1.9
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
The staged table is named measurements_<sensorId> with no aggregation or range component, and the handler drops that name before registering. Reusing a canvas_id for the same sensor at a different aggregation or window therefore replaces the earlier series, while README and docs/design.md describe reuse as additive…
Read the thread · 2026-09-22 · closed · 1 comment
bug(openaq_get_measurements): a supplied canvas_id is ignored when the result does not spill
Server version
0.1.9
mcp-ts-core version
0.13.6
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio
OS
macOS 27.0
Description
openaq_get_measurements accepts a canvas_id to stage a second series onto an existing canvas,
but only reads it when the pull is large enough to spill — canvas.acquire sits inside the overflow
branch. On a range that fits the inline preview, the id is discarded silently: the call succeeds
with no notice, no error, and no…
Read the thread · 2026-09-20 · closed · 1 comment
bug(openaq_get_measurements): a staged canvas returns no runtime pointer to the dataframe tools
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
stdio
Description
openaq_get_measurements is the only tool that mints a DataCanvas handle, and the response that
mints one names no tool that can read it. An agent holding an opaque canvasId has to already know
this server registers openaq_dataframe_describe and openaq_dataframe_query; one that doesn't
reports the truncation and stops, or re-calls with a…
Read the thread · 2026-08-13 · closed · 1 comment
feat(openaq_find_locations): expose monitor, mobile, and provider filters
Use case
An air-quality practitioner often needs one station class rather than every sensor in an area: reference monitors for regulatory comparison, fixed stations for a stable series, or one provider's network for consistent methods. openaq_find_locations returns isMonitor, isMobile, and provider but cannot filter on them, and filtering a 100-row page client-side misses matches on later pages.
Proposed behavior
Add three optional filters to openaq_find_locations,…
Read the thread · 2026-08-11 · closed · 1 comment
bug(openaq_list_countries): no limit or page — unfiltered and common-pollutant calls return the whole catalog
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
OS
macOS 26.1
Description
openaq_list_countries takes no limit or page. A call without filters returns the whole OpenAQ country catalog on both MCP surfaces, with each country's nested parameter list. parametersId doesn't bound it for common pollutants: parametersId: 2 (PM2.5) matches 156 of 158…
Read the thread · 2026-08-11 · closed · 1 comment
bug(openaq_find_locations): meta.found is a per-page count, so exhausted pages report no coverage and later pages misreport totals
Server version
0.1.7
mcp-ts-core version
0.11.0
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
OS
macOS 26.1
Description
openaq_find_locations reads OpenAQ's meta.found as a total, but on /v3/locations it counts only the page just returned: the row count on a partial page, and ">limit" on any full page, even when nothing follows. So a page past the end throws no_locations_found with coverage recovery, a full last page…
Read the thread · 2026-08-11 · closed · 1 comment
The remaining reports are on the project's issue tracker.