Releases: cyanheads/faostat-mcp-server
v0.1.4: mcp-ts-core ^0.10.8 — canvas binder detail on malformed-column SQL
mcp-ts-core ^0.10.8 — canvas binder detail on malformed-column SQL
Adopts the framework's native invalid_sql classification for canvas SELECTs; the server's gate-reason remap stays for non-SELECT / denied / malformed-identifier statements.
Fixed:
- faostat_dataframe_query: a SELECT with a mistyped column now surfaces invalid_sql with the DuckDB binder detail (data.binderMessage) naming the bad column, instead of a misleading non_select_statement (mcp-ts-core#236)
- faostat_dataframe_describe: filtered table lookups no longer raise an ambiguous-column Binder Error (mcp-ts-core#235)
Changed:
- canvas-staging gate-reason remap retained for non-SELECT / denied / malformed-identifier reasons; native invalid_sql passes through with the binder detail intact. Comments corrected; regression test asserts the binder detail
- devcheck outdated allowlist reconciled to empty; framework scaffold scripts re-synced (mcp-ts-core#242, #243, #237)
Dependencies:
- @cyanheads/mcp-ts-core ^0.10.6 -> ^0.10.8
- @duckdb/node-api ^1.5.3-r.3 -> ^1.5.4-r.1
- @types/node 25.9.3 -> 26.0.0
62 tests pass; bun run devcheck clean.
v0.1.3: spill dead band + error-contract alignment
spill dead band + error-contract alignment
Closes the 51-~600-row dead band in faostat_query_observations where mid-size results silently dropped rows, and aligns each tool's advertised error-contract reasons with what the handlers and SQL gate actually emit.
Fixed:
- faostat_query_observations no longer drops rows for results of 51-~600. The not-spilled previewRows (the complete set under the char budget) is returned inline instead of re-capping at limit with a misleading 'enable DataCanvas' notice. (#1)
- faostat_commodity_profile no longer advises enabling an already-on canvas when the merged set fits inline. (#1)
Changed:
- Removed dead errors[] entries: unknown_domain + empty_result (query_observations), no_match (resolve_codes). (#2)
- faostat_dataframe_query remaps every SQL-validity gate reason (from SQL_GATE_REASONS) to a stable invalid_sql; missing_table and system_catalog_access keep their own reasons. Declared set is now canvas_disabled, missing_table, system_catalog_access, invalid_sql. (#2)
Dependencies:
- better-sqlite3 ^12.10.1 -> ^12.11.1
- node-cron ^4.2.1 -> ^4.4.1
62 tests pass; bun run devcheck clean.
v0.1.2: hosted endpoint at faostat.caseyjhand.com/mcp
hosted endpoint at faostat.caseyjhand.com/mcp
Public Streamable HTTP instance added to server.json remotes and README.
Added:
- Public hosted instance at https://faostat.caseyjhand.com/mcp — remotes entry in server.json, Streamable HTTP client snippet in README
Dependency bumps:
- vitest ^4.1.8 → ^4.1.9
45 tests pass; bun run devcheck clean.
v0.1.1: Metadata fixes
Metadata fixes
Scoped the README header to the published npm name and added the repository field to the MCPB manifest.
Added:
manifest.jsonrepositoryfield, matchingpackage.jsonandserver.json
Changed:
- README
<h1>scoped to@cyanheads/faostat-mcp-server better-sqlite3^12.0.0 → ^12.10.1
45 tests pass; bun run devcheck clean.
v0.1.0: Initial release — FAOSTAT food & agriculture statistics over MCP
Initial release — FAOSTAT food & agriculture statistics over MCP
Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface. STDIO & Streamable HTTP.
Added:
- faostat_list_domains — full domain catalog from the live bulk manifest, annotated with local mirror status.
- faostat_resolve_codes — FTS5 resolution of human terms to area/item/element codes; flags country vs aggregate, surfaces the CPC crosswalk.
- faostat_query_observations — domain cube by area/item/element + year range; excludes aggregate regions (codes >= 5000) by default; spills large results to DataCanvas.
- faostat_commodity_profile — top producers, production trend, and trade flows for one commodity in a single call.
- faostat_dataframe_query / faostat_dataframe_describe — read-only SQL over staged canvas tables, plus table introspection.
- faostat-mirror service — per-domain MirrorService (SQLite + FTS5) and shared dimension store, fed by a streaming bulk-ZIP ingester; mirror:init / mirror:refresh / mirror:verify CLI.
Notes:
- Keyless bulk-download data path; run mirror:init to load the corpus before querying.
- Mirror and DataCanvas are native (better-sqlite3 / bun:sqlite, @duckdb/node-api) — Node/Bun only.
45 tests pass; bun run devcheck clean.