Pod

Available as Markdown and JSON. Pod is also available over MCP.

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.