Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add cyanheads/faostat-mcp-server --skill faostat-guidegit clone --depth 1 https://github.com/cyanheads/faostat-mcp-serverWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/cyanheads/faostat-mcp-server/faostat-guide)<a href="https://agentmods.dev/skills/cyanheads/faostat-mcp-server/faostat-guide"><img src="https://agentmods.dev/badge/skills/cyanheads/faostat-mcp-server/faostat-guide/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/cyanheads/faostat-mcp-server/faostat-guide"><img src="https://agentmods.dev/badge/skills/cyanheads/faostat-mcp-server/faostat-guide.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00049 | $0.01147 |
| Opus 5.5 | $0.00020 | $0.00459 |
| Sonnet 5.5 | $0.00010 | $0.00229 |
| Haiku 4.5 | $0.00005 | $0.00115 |
Grade A, and why
faostat-guide scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 50 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Scope
Use FAOSTAT for historical food and agriculture statistics from the domains available in this deployment's local mirror. Catalog presence does not establish local availability or observation coverage. The query surface is an area/item/element/year cube; do not infer bilateral trade partners or sub-national detail from country trade totals.
Identifiers
Obtain domain codes from faostat_list_domains and area, item, and element identities from faostat_resolve_codes. Pass numeric item codes through item_codes; when code is null, pass the exact code_text through item_codes_text. Resolve items and elements in each domain being analyzed; a CPC crosswalk is not an item code. Areas share a vocabulary across domains, so a resolved area alone does not establish observations in the chosen domain.
Use the canvas and table identifiers returned by faostat_query_observations or faostat_commodity_profile. A canvas identifier alone does not establish that the latest call staged a table: check the spill status and returned table name.
Gates
- Before concluding data is absent, distinguish a domain outside the mirror selection, an unfinished sync or upgrade, an unresolved identity, and an empty observation query. Inspect local sync metadata when freshness matters; the manifest's upstream update date is not proof that the mirror contains that update.
- Select the intended commodity and metric before calculating. Related raw and processed products are separate items. Keep units and elements separate in sums and comparisons; never replace a missing value with zero or present unflagged, estimated, or imputed data as official.
- Resolve elements with item_codes or item_codes_text to discover that item's metrics and observed units. These matches establish item/element compatibility, not coverage for particular countries, years, or sources. An empty observation query can return available_elements for the same purpose.
- Check period and value_qualifier before using a value. A reporting period such as 2000-2002 uses its midpoint as year for filtering; it remains a period observation. A value of 2.5 with qualifier < is an upper bound, not an exact measurement. Preserve the qualifier in calculations and conclusions.
- Keep source_code and source in the identity of observations when present. GLE can report multiple source estimates for the same area, item, element, and year; select a source or compare them separately rather than adding them together.
- For a same-year country ranking, restrict the analysis to that year. The commodity profile otherwise takes each country's own latest available year; report those years rather than describing the ranking as a common-year comparison.
- Choose either a published regional aggregate or its constituent countries for a total. Explicit area selections bypass automatic aggregate exclusion, so inspect the resolved country/aggregate classification even when the default exclusion is on.
- Inspect item kind separately: aggregate marks a verified domain-specific group that can overlap its members. Classification is incomplete; null means unclassified and does not establish that an item is safe to sum with other items. Item groups remain included in observation queries.
- Before calculating a complete-set statistic, read notices and truncation disclosures. An inline page may be incomplete even without a staged table. A truncated staged table lacks part of the source population; SQL pagination cannot recover those missing observations. Narrow or partition retrieval until every required slice is complete.
- Treat unavailable trade in a production-only profile as unavailable, not zero. Read trend observation counts alongside values: changing reporting coverage can change the total independently of production.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago Changed · +4 lines 8681b56d20e8
- 11d ago First seen · 46 lines · 49 tokens per session scan A 61383cea0d74
faostat-guide is a skill published in the GitHub repository cyanheads/faostat-mcp-server (3 stars, last pushed 5d ago), licensed Apache-2.0. It adds 49 tokens to every session and 1,147 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-28.
faostat-guide compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| faostat-guidecyanheads/faostat-mcp-server | Skill | 3 | 5d ago | Apache-2.0 | A | 49 | Claude Code |
| faostat-scientific-paperberba-q/faostat-skills | Skill | 10 | 6mo ago | MIT | A | 218 | Claude Code |
| faostat-analytical-briefberba-q/faostat-skills | Skill | 10 | 6mo ago | MIT | A | 183 | Claude Code |
| faostat-climateberba-q/faostat-skills | Skill | 10 | 6mo ago | MIT | A | 138 | Claude Code |
| faostat-commodityberba-q/faostat-skills | Skill | 10 | 6mo ago | MIT | A | 124 | Claude Code |
| faostat-mapberba-q/faostat-skills | Skill | 10 | 6mo ago | MIT | A | 127 | Claude Code |
| faostat-country-profileberba-q/faostat-skills | Skill | 10 | 6mo ago | MIT | A | 108 | Claude Code |