Skip to main content
Glama

Check plots for forest loss after the EUDR cut-off

eudr_check_plots

Check up to six production plots for forest loss after 31 December 2020, the cut-off in Regulation (EU) 2023/1115. Takes GeoJSON boundaries, the commodity, and the country of production. Returns a per-plot verdict, the loss years observed, how much of each plot was inspected, and a handle for the underlying satellite evidence. This answers Article 3(a) only: it does not check land tenure, permits, consent, or chain of custody, and it lists those gaps on every response. This has side effects, though it writes nothing to the organisation's records and costs no credits: every call asks emem.dev to make freshly signed measurements, so repeating a check returns the same finding under new signatures, and mints a short-lived evidence handle held on this server for 24 hours, which eudr_fetch_evidence resolves and which a later check will not reproduce.

Input Schema

NameRequiredDescriptionDefault
plotsNoSeveral plots checked together, each keeping its own verdict. Use this when a consignment draws on more than one plot. Six at a time answers inside a conversation; a consignment with more plots than that is a compile — use eudr_prepare_dds, which runs as a task.
countryYesISO-3166-1 alpha-2 code of the country of production. It sets the benchmark risk tier.
geojsonNoOne plot, as a GeoJSON Polygon, MultiPolygon or Point in WGS84 (EPSG:4326). Article 2(28) requires six decimal places. A Point is admissible only for a plot under four hectares that is not forest. Supply this or `plots`.
hs_codeNoOptional HS code, 2 to 8 digits. Overrides the commodity-to-Annex-I mapping.
commodityYesWith kind=trade, return just this Annex I commodity's lanes: cocoa, coffee, rubber, soya, oil_palm, cattle or wood.
quantity_kgNoOptional net mass of the consignment. It does not affect the verdict.

Output Schema

NameRequiredDescriptionDefault
engineYes
findingYes
verdictYesKeep only statements that reached this verdict. Leave it out for all of them.
coverageYes
evidenceYesfact_count is always present. It is a count of facts that exist, not of facts shipped: the conversational surface carries the address rather than the list.
observedYes
per_plotYes
risk_scoreNo
scope_noteYes
next_actionYes
cut_off_dateYes
country_risk_tierNo
plots_not_checkedNoPlots that ran out of time before they were measured. Present only when some were. When it is non-empty the verdict is indeterminate by construction, whatever the plots that did come back said — they do not cover the ones that did not.
unresolved_checksYes
deforestation_freeYestrue when the land measured clean, false when post-cut-off loss was found, and null when the question was not settled — nothing measured, or a commodity Annex I does not cover. Null is not false: it means there is no finding.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / plots / items / properties / plot_id / description
      Previous value: -"Your identifier for the plot, echoed on its verdict row. Letters, digits and -_.: only."New value: +"Your identifier for the plot, echoed on its verdict row. Letters, digits and -_.: only. Keep it opaque — a farm or cadastral code, never a person's name: this one field is carried into a signed, public, append-only fact at the evidence provider, which cannot erase it without breaking the receipts that cite it (emem.dev, 2026-10-16)."
  2. Changed1 schema field changed
    • addedOutput schema / properties / verdict / description
      Added value: +"Keep only statements that reached this verdict. Leave it out for all of them."
  3. Changed2 schema fields changed
    • changedInput schema / properties / commodity / description
      Previous value: -"The Annex I commodity produced on the plot."New value: +"With kind=trade, return just this Annex I commodity's lanes: cocoa, coffee, rubber, soya, oil_palm, cattle or wood."
    • removedInput schema / properties / commodity / enum
      Removed value: -[
      -  "cattle",
      -  "cocoa",
      -  "coffee",
      -  "oil_palm",
      -  "rubber",
      -  "soya",
      -  "wood"
      -]
  4. Changed2 schema fields changed
    • addedOutput schema / properties / deforestation_free / description
      Added value: +"true when the land measured clean, false when post-cut-off loss was found, and null when the question was not settled — nothing measured, or a commodity Annex I does not cover. Null is not false: it means there is no finding."
    • changedOutput schema / properties / deforestation_free / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
  5. Changed1 schema field changed
    • addedOutput schema / properties / plots_not_checked
      Added value: +{
      +  "description": "Plots that ran out of time before they were measured. Present only when some were. When it is non-empty the verdict is indeterminate by construction, whatever the plots that did come back said — they do not cover the ones that did not.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. Changed2 schema fields changed
    • changedInput schema / properties / plots / description
      Previous value: -"Several plots checked together, each keeping its own verdict. Use this when a consignment draws on more than one plot."New value: +"Several plots checked together, each keeping its own verdict. Use this when a consignment draws on more than one plot. Six at a time answers inside a conversation; a consignment with more plots than that is a compile — use eudr_prepare_dds, which runs as a task."
    • changedInput schema / properties / plots / maxItems
      Previous value: -25New value: +6
  7. Changed1 schema field changed
    • changedInput schema / properties / plots / maxItems
      Previous value: -8New value: +25
  8. First observed

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag non-read-only, open-world, non-idempotent behavior, and the description adds substantial context beyond them: no organisational records are written, no credits are consumed, calls generate freshly signed measurements, repeated checks return the same finding under new signatures, and a 24-hour evidence handle is minted that later checks will not reproduce. This is consistent with and much richer than the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well front-loaded: purpose first, then return values, scope exclusions, and side effects. Some return-value detail overlaps the output schema and the final sentence is long, but almost every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a rich output schema and annotations, the description fills the remaining gaps an agent needs: exact scope, exclusions, side effects, evidence-handle lifetime, and the fact that repeated checks do not reproduce the same handle. It is complete enough to call correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters and constraints are already documented in the schema. The description only restates the main inputs (GeoJSON boundaries, commodity, country) and the six-plot limit, adding no syntax or constraint detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource and regulatory scope: check up to six production plots for forest loss after 31 December 2020. It clearly bounds the tool to Article 3(a), though it does not explicitly name the sibling tool to use for larger consignments or broader compliance checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use context (up to six plots, forest-loss check after the EUDR cut-off) and explicit when-not coverage by excluding land tenure, permits, consent and chain of custody. It names eudr_fetch_evidence only as the resolver for the returned evidence handle, not as an alternative for other compliance assessments, so alternatives are not fully routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.