mcp server
faostat-mcp-server
UN FAOSTAT global food & agriculture statistics over a local SQLite mirror, via MCP.
Description as published by the maintainer. Source
- version 0.2.2
- active
active — Most recent push to the repository was 2026-07-30.
What this server can do
6 functions, named and described by the server itself. Parameter names are shown because they say more about what a function does than its name usually does.
faostat_commodity_profile(top_n, year_end, canvas_id, item_query, year_start)- Assemble a global profile for one commodity in a single call: top-producing countries, the annual production trend, and trade flows (top exporters and importers). Accepts a commodity name, resolves it to item codes, then queries the production (QCL) and trade (TCL) domains and merges the results. Each ranking is a per-country sum across the resolved items, taken at that country's own latest year with data and grouped by unit so incomparable quantities are never added. The trend is returned inline as year/value points. Country-level only (aggregates excluded). When a required domain is not indexed locally, returns a partial profile with a notice naming the gap rather than failing. The full merged observation set spills to a DataCanvas table for deeper SQL via faostat_dataframe_query. Required: item_query.
faostat_dataframe_describe(name, canvas_id)- List the canvas tables (faostat_xxxxxxxx) staged by faostat_query_observations and faostat_commodity_profile, each with its source tool, the query parameters that produced it, creation/expiry timestamps, row count, and column schema. Call this before faostat_dataframe_query to discover the exact table and column names to reference in SQL.
faostat_dataframe_query(sql, canvas_id, row_limit)- Run a single-statement SELECT against the canvas tables staged by faostat_query_observations and faostat_commodity_profile (table names look like faostat_xxxxxxxx). Use this for cross-country and cross-item aggregation, GROUP BY rankings, joins, and time-series analysis over the full result set the inline preview only sampled. Standard DuckDB SQL — joins, aggregates, window functions, CTEs all work. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected; system catalogs (information_schema, sqlite_master, duckdb_*) are denied — list staged tables via faostat_dataframe_describe. Every row carries its data-quality `flag` — commonly A=Official, B=time-series break, E=Estimated, I=Imputed, M=Missing (value cannot exist), T=Unofficial, X=from an international organization, plus others FAOSTAT defines per domain — keep it in projections, treat any unrecognized flag as informational, and never assume it is official. Required: sql.
faostat_list_domains(code, limit, topic, offset, indexed_only)- Discover FAOSTAT statistical domains (production, trade, food balances, food security, land use, agri-emissions, prices, value) with their codes, descriptions, last-update date, upstream row count, and local index status. Every query keys on a domain code from here. The `indexed` flag tells you which domains are queryable right now; un-indexed domains exist in the catalog but must be added to FAOSTAT_DOMAINS and re-synced before faostat_query_observations can read them. The catalog runs to ~69 domains with long descriptions, so responses are paged: narrow with `topic` / `indexed_only`, pass `code` to fetch one domain outright, or page with `offset` + `limit` — when the response reports `truncated`, pass the returned `nextOffset` to fetch the rest.
faostat_query_observations(limit, domain, year_end, canvas_id, area_codes, item_codes, year_start, element_codes, include_aggregates)- Query a FAOSTAT domain's data cube by area(s), item(s), element(s), and year range, returning observations (area, item, element, year, value, unit, and the data-quality flag). Resolve codes first with faostat_resolve_codes — the cube is unqueryable without them. Aggregate regions (World, continents, economic groupings) are EXCLUDED by default so a naive SUM does not double-count a region with its member countries; set include_aggregates=true to get the regional roll-ups, or pass explicit area_codes to query exactly what you name. Small result sets return inline; large ones spill to a DataCanvas table (returned canvas_id + table_name) for GROUP BY / ranking / time-series analysis via faostat_dataframe_query. Every row carries its flag — commonly A=Official, B=time-series break, E=Estimated, I=Imputed, M=Missing (value cannot exist), T=Unofficial, X=from an international organization, plus others FAOSTAT defines per domain — so honor it, treat any unrecognized flag as informational, and never assume an estimated, imputed, or unrecognized value is official. Required: domain.
faostat_resolve_codes(code, limit, query, domain, offset, dimension, name_contains)- Resolve human terms to the opaque integer codes faostat_query_observations needs, within a dimension: areas (countries/regions), items (commodities), or elements (metrics like production, yield, import quantity). Pass `query` for fuzzy full-text matching ("maize" → item 56), `name_contains` for a substring filter, or `code` for an exact-code lookup; omit all three to list the whole dimension. Item and element results are scoped to the requested domain — only codes present in that domain's cube are returned, so a resolved code is always queryable there (areas are shared across domains). Page large listings with `offset` + `limit`: when the response reports `truncated`, pass the returned `nextOffset` to fetch the next page. Every area match is flagged `country` or `aggregate` — aggregates (World, continents, economic groupings — codes ≥ 5000 plus a few curated sub-threshold roll-ups such as China=351, which sums mainland + Taiwan + Hong Kong + Macao) double-count if summed with their member countries, so resolve before querying and exclude aggregates unless you want the regional roll-up. Required: domain, dimension.
Last successful function declaration observed on . Source: https://faostat.caseyjhand.com/mcp. We list what the server declared; we do not call any of these functions.
Endpoint status observed on . Source: https://faostat.caseyjhand.com/mcp.
Signals
These are separate measurements of different things. They are deliberately not combined into one score, because a popularity number that mixes website traffic with saves and stars cannot be checked or acted on.
| Signal | Value | What it measures | Window | Observed | Source |
|---|---|---|---|---|---|
| GitHub stars | 1 | Number of GitHub accounts that bookmarked this repository since it was created. It is a bookmark count, not installs, not active users and not quality. | cumulative, all time | GitHub | |
| Last commit | 2026-07-30 | Date of the most recent push to any branch. This is the strongest cheap indicator of whether the project is still maintained. | point in time | GitHub | |
| Open issues | 1 | Open issues plus open pull requests, as GitHub counts them together. A high number can mean an active project or an abandoned one. | as of fetch | GitHub | |
| Latest published version | 0.2.2 | Latest version string the maintainer published to the registry. | as of fetch | Model Context Protocol | |
| Registry record last updated | 2026-07-27 | When the registry record was last updated by its maintainer. | point in time | Model Context Protocol | |
| License | Apache-2.0 | Licence GitHub detected in the repository. Detection can be wrong; the LICENSE file is authoritative. | as of fetch | GitHub | |
| First listed in the MCP Registry | 2026-07-27 | Date this server was first published to the official MCP Registry. Not a usage or quality measure. | point in time | Model Context Protocol | |
| repository status | active | The repository exists on GitHub and is not archived. This says nothing about how recently it was worked on. | as of fetch | GitHub | |
| mcp tools declared | 6 tools | Number of functions the server itself declared when asked to list them. This is what the server offers an agent, not a measure of how well any of them work. | as of probe | faostat.caseyjhand.com | |
| mcp endpoint status | ok | The server listed 6 functions when asked. | as of probe | faostat.caseyjhand.com |
Where to get it
Related, by what their authors tagged them
-
io.github.cyanheads/usda-mcp-server
— last commit 2026-07-30, shares bun, food
Search foods, compare nutrients, and look up the full USDA FoodData Central database.
-
io.github.cyanheads/openfoodfacts-mcp-server
— last commit 2026-07-30, shares cyanheads, food
Barcode lookup, nutrition search, and product comparison for 3M+ crowd-sourced food products.
-
io.github.AIDataNordic/food-recipe-mcp
— last commit 2026-07-14, shares food
Semantic search across 50,000+ food recipes with hybrid retrieval and reranking.
-
io.github.ericblair1903/nutrients-mcp
— last commit 2026-07-25, shares food
Analyze food photos or text for calories, macros, vitamins, minerals, and allergens.
-
io.github.cyanheads/eurostat-mcp-server
— last commit 2026-08-04, shares bun, cyanheads, open-data
Search and query the Eurostat catalogue — EU economy, demography, trade, and NUTS regional data.
-
Statistics Canada MCP Server
— last commit 2026-08-02, shares open-data, statistics
Access Statistics Canada data via the Web Data Services API
-
io.github.cbetz/ratebook
— last commit 2026-07-01, shares duckdb, open-data
Open MCP server for US electricity tariffs: real rate lookup, bill estimates, and when to charge.
-
io.github.Fashad-Ahmed/universal-db-mcp
— last commit 2026-06-11, shares duckdb, sqlite
Security-first MCP server for PostgreSQL, SQLite, MySQL, DuckDB with SQL injection prevention.
-
io.github.cyanheads/imf-mcp-server
— last commit 2026-08-06, shares cyanheads, statistics
Query IMF SDMX 3.0 macroeconomic dataflows — WEO, BOP, CPI, exchange rates, 190 countries.
-
io.github.cyanheads/oecd-mcp-server
— last commit 2026-07-30, shares cyanheads, statistics
Search and query 1,500+ OECD statistical datasets via SDMX. Keyless.
These share tags the maintainers applied themselves, such as bun, food, cyanheads, open-data. Common tags like "mcp" or "ai" are ignored for this: agreeing with six hundred other projects is not a similarity.
This is not a recommendation and not a test result. It is a map of what the authors said their work is about.
Also from cyanheads
-
io.github.cyanheads/anime-mcp-server
— last commit 2026-07-30
Search anime/manga, franchise watch order, schedule, characters, rankings, studio filmography.
-
io.github.cyanheads/arxiv-mcp-server
— last commit 2026-07-27
Search arXiv, fetch paper metadata, and read full-text content.
-
io.github.cyanheads/astronomy-mcp-server
— last commit 2026-07-31
Offline observational astronomy: positions, rise/set, moon phases, eclipses, and seasons.
-
io.github.cyanheads/attack-surface-mcp-server
— last commit 2026-07-30
Passive external attack-surface mapping: CT subdomains, DNS, TLS, HTTP posture, RDAP/WHOIS, Shodan.
-
io.github.cyanheads/aviation-weather-mcp-server
— last commit 2026-07-30
Fetch METARs, TAFs, PIREPs, and SIGMETs/AIRMETs from the NWS Aviation Weather Center.
-
io.github.cyanheads/biorxiv-mcp-server
— last commit 2026-07-11
Search and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP.
-
io.github.cyanheads/bls-labor-mcp-server
— last commit 2026-07-17
Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP.
-
io.github.cyanheads/bls-mcp-server
— last commit 2026-07-17
Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP.
-
io.github.cyanheads/bluesky-mcp-server
— last commit 2026-07-31
Search posts, profiles, feeds, threads, and trending topics on Bluesky.
-
io.github.cyanheads/brapi-mcp-server
— last commit 2026-07-16
Collaborative BrAPI v2.1 MCP workspace — studies, germplasm, genotypes across Breedbase, T3, more.
How the author describes it
Topics the maintainer set on GitHub: agriculture, ai-agents, bun, cyanheads, duckdb, fao, faostat, food, food-security, mcp, mcp-server, model-context-protocol, open-data, sqlite, statistics, typescript.
This record as data
Every field on this page, with its source and observation date, is in the catalog JSON. Fetch the whole kind at once instead of parsing this HTML.
GET /api/v1/entries/mcp_server.json