Reported issues for fema-mcp-server
Pod holds 17 of 17 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 fema-mcp-server.
Most discussed
bug(search_nfip): calls that stage nothing still mint a canvas
Server version
0.1.13
mcp-ts-core version
0.10.14
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
Description
With DataCanvas enabled, fema_search_nfip calls canvas.acquire() before spillover(). Without a canvas_id, this mints a canvas (a DuckDB instance plus a CANVAS_MAX_CANVASES_PER_TENANT slot) that the response exposes only on a spill. An inline result, no_results, or an upstream failure before staging leaves that canvas…
Read the thread · 2026-06-08 · closed · 7 comments
feat(search_nfip): bound the canvas-disabled inline response by the preview budget
Use case
With DataCanvas disabled, fema_search_nfip returns up to limit claims inline and applies no size bound: the default limit of 1,000 inlines about 279 KB of claim JSON, and the maximum of 10,000 about 2.8 MB, before the format() text. With the canvas enabled, the inline preview is capped at 100,000 characters. A caller on a canvas-disabled deployment gets a response far larger than a model context handles well, with no signal it could have asked for less.
Proposed…
Read the thread · 2026-09-24 · closed · 1 comment
bug(search_nfip): capped spill reports staged rows as total_count
Server version
0.3.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
When a fema_search_nfip spill hits the 50,000-row canvas cap, total_count reports the number of staged rows, not the number of matching claims. The field is described as "Total matching claims in the filtered dataset before the limit", and the handler returns total_count: result.handle.rowCount.
Steps to reproduce
1.…
Read the thread · 2026-09-24 · closed · 1 comment
bug(search_nfip): cause_of_damage and occupancy_type descriptions misstate the returned codes
Server version
0.3.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
fema_search_nfip passes OpenFEMA's causeOfDamage and occupancyType codes through unchanged. The output schema, though, describes cause_of_damage as text ("Flooding", "Tidal Overflow") and occupancy_type as 1=Single Family, 2=2-4 Family, 6=Non-Residential. The NfipClaims v3 [data…
Read the thread · 2026-09-24 · closed · 1 comment
bug(query_dataset): catalog-listed dataset that 404s gets spelling advice
Server version
0.2.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
fema_query_dataset resolves versions from the OpenFEMA dataset catalog, keyed on each entry's webService path. A listed dataset whose endpoint returns 404 fails as unknown_dataset, with advice to check the name's spelling and case. Two names OpenFEMA serves are also rejected: OpenFemaDataSets, the catalog's own documented…
Read the thread · 2026-09-24 · closed · 1 comment
bug(assistance,search,query_dataset): paging past the end reports no results with the wrong recovery
Server version
0.2.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
fema_get_housing_assistance, fema_get_public_assistance, and fema_search_disasters throw no_results (and fema_query_dataset returns a "No records found … check field names and filter syntax" notice) whenever the returned page is empty, even when the upstream total is non-zero because offset is past the end. The…
Read the thread · 2026-09-24 · closed · 1 comment
bug(search_disasters): date_from/date_to reach OpenFEMA unvalidated
Server version
0.2.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
fema_search_disasters declares date_from and date_to as free z.string() and interpolates them into declarationDate ge '<value>T00:00:00.000Z'. Any string reaches OpenFEMA. Free text (yesterday) is rejected with HTTP 400, which the service maps to invalid_filter, a reason this tool doesn't declare, so the caller gets…
Read the thread · 2026-09-24 · closed · 1 comment
bug(search_nfip): FimaNfipClaims v2 is deprecated and removed on 2026-10-15
Server version
0.2.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
fema_search_nfip reads FimaNfipClaims v2 (fetchNfipClaims in src/services/openfema/openfema-service.ts). OpenFEMA has deprecated that dataset: its data is frozen as of 2026-06-01 and the endpoint is removed on 2026-10-15. The replacement is NfipClaims v3 (the Fima prefix is dropped). After the removal date every…
Read the thread · 2026-09-24 · closed · 1 comment
Most recent
bug(dataframe_query): declares invalid_query, which the canvas never throws
Server version
0.3.0
mcp-ts-core version
^0.13.6
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
fema_dataframe_query declares one error reason, invalid_query, which the canvas never throws. The reasons the framework's SQL gate and engine actually emit (invalid_sql, missing_table, non_select_statement, multi_statement, denied_function, sql_parse_error, and others) reach the wire undeclared, so none of them…
Read the thread · 2026-09-24 · open · 0 comments
bug(query_dataset): OpenFEMA 400 errors misattribute the failing clause and field
Server version
0.2.0
mcp-ts-core version
^0.13
Runtime
Bun
Runtime version
Bun 1.4.x
Transport
HTTP (Streamable HTTP)
Description
OpenFemaService.fetchDataset maps every JSON 400 from OpenFEMA to reason: invalid_filter with a fixed message, discarding the failing clause (type) and the field that OpenFEMA's body names. A bad select or orderby reads as a $filter error, and an Int16 overflow on any field (fyDeclared, yearOfLoss) reads as an…
Read the thread · 2026-09-22 · closed · 1 comment
bug(query_dataset): datasets outside v2 are unreachable — base URL pins /api/open/v2
Server version
0.1.14
mcp-ts-core version
0.12.3
Runtime
Bun
Runtime version
Bun 1.3.x
Transport
HTTP (Streamable HTTP)
Description
fema_query_dataset builds every URL from FEMA_BASE_URL (default https://www.fema.gov/api/open/v2), but OpenFEMA versions each dataset separately: as of 2026-09-24 its catalog lists 49 entities, 34 of them only at v1, v3, or v4. A wrong-version request returns a 404 HTML page,…
Read the thread · 2026-09-19 · closed · 1 comment
feat(search_nfip): name fema_dataframe_describe in the canvas spill guidance
Use case
When fema_search_nfip spills to a canvas, the guidance in the response names only fema_dataframe_query, so an agent writes SQL against guessed column names, and a wrong one fails invalid_sql and costs a turn. The inline rows are no reliable column list either: fields that are null on a row are dropped from it, so a small limit can hide a column that the canvas table always has.
Proposed behavior
Every layer that hands out a canvas names fema_dataframe_describe…
Read the thread · 2026-08-13 · closed · 1 comment
bug(housing_assistance): format drops a dataset's count when its records page is empty
Server version
0.1.13
mcp-ts-core version
0.10.14
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
Description
fema_get_housing_assistance always returns owners_count and renters_count in structuredContent, but format() prints each count only in its section header, and a section renders only when its records array is non-empty. Whenever one array is empty, that dataset's count is missing from content[]: the zero for a dataset…
Read the thread · 2026-07-16 · closed · 1 comment
feat(disaster-resource): add actionable not-found recovery contract
Use case
fema://disaster/{disasterNumber} fails with NotFound for a malformed, out-of-range, or unknown disaster number, but declares no error contract, so its errors carry no reason and no recovery hint. A fema_get_disaster caller hitting the same failure gets a not_found reason pointing at fema_search_disasters; a resource client gets only the failed number.
Related: #2 (added the Int16 guard to this resource without a recovery hint).
Proposed behavior
Declare one…
Read the thread · 2026-07-16 · closed · 1 comment
bug(assistance): out-of-range disaster numbers bypass tool error contracts
Server version
0.1.13
mcp-ts-core version
0.10.14
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
Description
fema_get_public_assistance and fema_get_housing_assistance accept a disaster_number above OpenFEMA's Int16 ceiling (32767). OpenFEMA rejects the filter with HTTP 400, and the service maps it to reason: invalid_filter, a reason neither tool declares, so ctx.recoveryFor('invalid_filter') resolves to {} and the error…
Read the thread · 2026-07-16 · closed · 1 comment
bug(search_nfip): non-spilled limit has no retrieval continuation
Server version
0.1.13
mcp-ts-core version
0.10.14
Runtime
Bun
Runtime version
Bun 1.3.14 (env: CANVAS_PROVIDER_TYPE=duckdb)
Transport
HTTP (Streamable HTTP)
Description
When fema_search_nfip returns fewer claims than match and stages nothing, the rest can't be reached: there is no offset and no canvas. That covers canvas-disabled deployments, and canvas-enabled ones when the match fits the inline preview (about 320–350 rows). The order isn't total…
Read the thread · 2026-07-16 · closed · 1 comment
bug(search_disasters): disclose 10k area-row cap and continuation
Server version
0.1.13
mcp-ts-core version
0.10.14
Runtime
Bun
Runtime version
Bun 1.3.14
Transport
HTTP (Streamable HTTP)
Description
fema_search_disasters deduplicates at most the 10,000 most recent designated-area rows (OVERFETCH_CAP). When more rows match, a normal page gives no runtime signal: total_declarations, totalCount, and the N of M header report the window's count as the total, and nothing points to older declarations. Only the static…
Read the thread · 2026-07-16 · closed · 1 comment
The remaining reports are on the project's issue tracker.