eudr
Server Details
Compile EUDR Annex II Due Diligence Statements from operator, supplier, and plot geolocation.
- Status
- Healthy
- Uptime
- 99.6% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Vortx-AI/eudr-plugin
- GitHub Stars
- 0
TDQS
Scored across 21 tools
Each tool maps to a distinct EUDR workflow stage: plot checking, evidence fetching, DDS compile/read/export/trace, supplier requests, procurement decisions, mitigation status, and receipt verification. The several status/overview tools answer clearly different questions, so an agent can select among them without guessing.
All tools use a uniform eudr_ prefix and snake_case, making the set easy to scan. Most names are verb_noun, but a few are noun phrases such as eudr_account_usage, eudr_compliance_status, and eudr_execution_trace, which is a minor deviation rather than a real inconsistency.
The 21 tools cover a genuinely broad compliance lifecycle, and most have a clear role. Still, at 21 tools the surface feels heavy, and some read-only summary/list tools could potentially be consolidated without losing core capability.
The set covers the main EUDR lifecycle: farms, plot checks, evidence, supplier requests, DDS compilation/export, procurement decisions, mitigation status, and verification. Notable gaps remain, such as no tool to update or delete farm details and no tool to record a procurement decision outcome, even though the descriptions imply that outcome can later be recorded.
Available Tools
21 toolseudr_account_usageWallet balance and what it coversAIdempotentInspect
Report this organisation's credit balance, how many signed statements it will cover, and what has been spent. Checking plots, looking up references, assessing supplier gaps and reading traces cost nothing and are always available — only compiling a signed statement draws the balance down. Use this before starting a batch of compiles so the user is not surprised part-way through. The first call for an organisation writes: it opens the wallet, grants the welcome credits and records that grant as the opening ledger line. Every call after that only reads.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| charged_unit | Yes | |
| organisation | Yes | |
| credits_spent | No | |
| free_of_charge | Yes | |
| balance_credits | Yes | |
| recent_activity | No | |
| credits_received | No | |
| analyses_remaining | Yes | |
| credits_per_analysis | Yes | |
| per_plot_pricing_from | No | |
| credits_per_extra_plot | No | Added for each plot after the first, from per_plot_pricing_from. |
| welcome_credits_granted_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description carries an unusual and important disclosure that the annotations cannot: readOnlyHint=false is explained by "The first call for an organisation writes: it opens the wallet, grants the welcome credits and records that grant as the opening ledger line. Every call after that only reads," which also justifies idempotentHint=true and destructiveHint=false. Return format and any ledger detail are left to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is reported, then the cost model, then the first-call write nuance. Every sentence carries distinct information, though the free-vs-paid sentence and the write-behavior sentence are doing overlapping work that could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the cost model, the free/paid boundary, the one-time write on first call, and the recommended call timing — everything an agent needs to invoke it correctly and interpret when it mutates state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the scoring baseline the schema imposes no documentation burden; there is nothing for the description to clarify about inputs. No credit or penalty beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (report) and resource (this organisation's credit balance) and enumerates the exact contents: balance, number of signed statements covered, and spend. It is clearly distinguishable from siblings like eudr_export_statement or eudr_compliance_status without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to call it ("Use this before starting a batch of compiles") and why (so the user is not surprised part-way through). It also draws the operational line between free operations (checking plots, lookups, gap assessment, traces) and the one operation that consumes balance, which is exactly the guidance needed to route between this tool and the compile-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_assess_evidence_gapsFind missing Article 9 information per supplierARead-onlyIdempotentInspect
Check what each supplier's file is still missing against Article 9(1) of Regulation (EU) 2023/1115, the closed list of information an operator must hold before filing. Returns the unmet items with their article reference and what to request, separating items that block filing from items that merely leave the file incomplete. This is a checklist over the fields you supply; it reads no documents and judges no evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| suppliers | Yes | The suppliers to weigh up, each with what is already held about them. One entry per supplier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| basis | Yes | |
| checked | Yes | |
| summary | Yes | |
| suppliers | Yes | One row per supplier: status, gaps with their article limb and the request to send, blocking_gaps, held limbs, country tier. |
| incomplete | Yes | |
| scope_note | Yes | |
| blocked_from_filing | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds real substance beyond them: it discloses the output's structure (unmet items with article reference and recommended follow-up, split into filing-blocking vs. merely-incomplete), and explicitly scopes its own authority by stating it does not read documents or judge evidence. It omits any note on the 50-supplier batch cap, which is the one remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states purpose and legal anchor, the second states the return shape, the third states scope limits. The most important information (what is missing per supplier) is front-loaded, and there is no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Low-complexity, single-input, read-only tool with a 100%-documented schema and an existing output schema, so the description need not explain return values—and it still sketches them usefully. It is essentially complete; only the batch-size ceiling and explicit sibling routing are left to structured data or inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is effectively one top-level parameter, with each nested field already documented including article mappings (e.g. email/address for Article 9(1)(e), scientific_name for 9(1)(a)). The description says 'checklist over the fields you supply' but adds no field-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Check what each supplier's file is still missing') plus a precise, normatively-anchored resource (Article 9(1) of Regulation (EU) 2023/1115), and it names the deliverable ('returns the unmet items with their article reference'). It is clearly distinguishable from siblings like eudr_fetch_evidence or eudr_request_supplier_evidence because it is a gap analysis, not a fetch or a request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence establishes a clear boundary of applicability: it is a checklist over supplied fields, reads no documents, and judges no evidence, which tells the agent not to reach for it when document inspection or evidentiary judgment is needed. It stops short of naming the alternative tools (e.g. eudr_fetch_evidence) for those cases, so it is clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_check_plotsCheck plots for forest loss after the EUDR cut-offAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| plots | No | 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. | |
| country | Yes | ISO-3166-1 alpha-2 code of the country of production. It sets the benchmark risk tier. | |
| geojson | No | One 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_code | No | Optional HS code, 2 to 8 digits. Overrides the commodity-to-Annex-I mapping. | |
| commodity | Yes | With kind=trade, return just this Annex I commodity's lanes: cocoa, coffee, rubber, soya, oil_palm, cattle or wood. | |
| quantity_kg | No | Optional net mass of the consignment. It does not affect the verdict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| engine | Yes | |
| finding | Yes | |
| verdict | Yes | Keep only statements that reached this verdict. Leave it out for all of them. |
| coverage | Yes | |
| evidence | Yes | fact_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. |
| observed | Yes | |
| per_plot | Yes | |
| risk_score | No | |
| scope_note | Yes | |
| next_action | Yes | |
| cut_off_date | Yes | |
| country_risk_tier | No | |
| plots_not_checked | No | 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. |
| unresolved_checks | Yes | |
| deforestation_free | Yes | 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. |
TDQS
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.
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.
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.
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.
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.
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.
eudr_compliance_statusSummarise where this organisation standsARead-onlyIdempotentInspect
Summarise the signed-in organisation's position: how many statements are filable, how many are blocked by a non-negligible verdict, how many are unresolved, broken down by commodity and country, plus outstanding supplier evidence requests. Answers "where do we stand" without enumerating every record.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| totals | Yes | |
| by_country | Yes | |
| scope_note | Yes | |
| next_action | Yes | |
| by_commodity | Yes | |
| organisation | Yes | |
| supplier_requests | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds behavioral context by specifying the content of the summary (counts by commodity/country, supplier evidence requests) and its scoping to the signed-in organisation. It does not disclose any hidden limitations, but none are expected for a read-only summariser.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every clause adds value (specific counts, breakdowns, the non-enumeration caveat). No fluff or repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is complete: it states what the tool does, what it returns (counts, breakdowns, supplier requests), and its scope (signed-in organisation). The only minor missing piece is an explicit reference to a sibling like eudr_list_statements, but the 'without enumerating' phrasing covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100% and the baseline is 4. The description adds no parameter-specific detail (there are none to add), but it clarifies what the invocation accomplishes, which is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('summarise'), a resource ('the signed-in organisation's position'), and enumerates exactly what is summarised (filable, blocked, unresolved statements; supplier evidence requests; breakdowns). It explicitly differentiates from enumeration tools by saying 'without enumerating every record', distinguishing it from siblings like eudr_list_statements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: when an overview is needed rather than a detailed listing, as indicated by 'Answers "where do we stand" without enumerating every record.' It implies alternatives for enumeration but does not explicitly name them or state when not to use this tool, so it stops short of a full exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_create_farmAdd a farm, with its boundary if knownAInspect
Add a farm to this organisation's record. A name is enough; give the crop, country and a pin (lat, lon) when known. Give its boundary as boundary (a GeoJSON Polygon or MultiPolygon, longitude first), or as fields: several field outlines (for example Fields of The World parcels) that are joined into one farm by closing the bunds and tracks between neighbours (join_m, default 3 m each way), fields farther apart kept as separate pieces. With a boundary, what follows runs at once: the country from where the land lies when none is given, the forest record warmed, and the land check when the crop is one the EU regulation covers. With only a pin, the mapped fields around it are looked up as suggestions for a person to accept. This writes to the organisation's record.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | A pin on the farm, in WGS84 degrees. Use it when no boundary is known. | |
| lon | No | The pin's longitude, WGS84 degrees. GeoJSON order is longitude first; this field is not. | |
| crop | No | What grows there, in plain words (`cocoa`, `coffee`, `oil palm`). It decides whether the EU deforestation rules apply at all. | |
| name | Yes | What the farm is called, as the buyer and the farmer would say it. | |
| fields | No | GeoJSON Polygons to join into one farm. | |
| join_m | No | How far apart two field outlines may be and still be treated as one farm, in metres each way. Default 3, which closes the bunds and tracks between neighbouring parcels. | |
| country | No | ISO 3166-1 alpha-2. | |
| boundary | No | GeoJSON Polygon or MultiPolygon. |
Output Schema
| Name | Required | Description |
|---|---|---|
| then | No | |
| farm_id | Yes | |
| boundary | No | |
| farm_url | Yes | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (write, open-world, non-idempotent, non-destructive), the description discloses the actual side-effect chain: country auto-derived from the land, forest record warmed, and the EUDR land check triggered when the crop is covered; with only a pin, mapped fields are merely suggested for human acceptance. That is materially more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then dense but purposeful detail on geometry input and cascade behavior; almost every sentence earns its place. The one long mid-paragraph sentence about what 'runs at once' is somewhat run-on and forces a re-read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers required vs optional inputs and cascading effects well. Gaps remain around permissions/auth and what happens on a duplicate create (idempotentHint is false but duplicates go unmentioned).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds semantics the schema does not: how `fields` are joined by closing bunds and tracks, what `join_m` achieves in practice, and that `crop` decides whether the EUDR rules apply. It adds genuine meaning on top of the field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a farm to this organisation's record') plus the conditional scope 'with its boundary if known', so the agent knows this is a create operation that may also ingest geometry. It never names the obvious sibling (eudr_set_farm_boundary) to draw the line between creating-with-boundary and attaching a boundary later, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives real context for input choice: 'a name is enough', give a pin 'when no boundary is known', and boundary or fields when the outline exists. However it offers no tool-level guidance — nothing tells the agent when to call this versus eudr_set_farm_boundary or eudr_list_farms, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_decide_lotDecide whether to buy a banana lot, where to sell it, and up to what priceAInspect
Run the organisation's own buying process on a banana lot from one of its farms: every destination in its library gets GO / GO WITH CONDITIONS / NEEDS A PERSON / NO-GO with the chance the whole chain holds, the margin P10/P50/P90, the most the buyer can pay and keep that outcome, the deal zone against the farmer's ask, and what the farmer is told (never the walk-away price). Every default the lot needed is returned as a stated assumption. Banana only; other crops are refused by name. The run is stored as a decision the organisation can later record an outcome against. Send lot in the shape of lot_example from eudr_procurement_overview. The crop is taken from the farm's own record.
| Name | Required | Description | Default |
|---|---|---|---|
| lot | Yes | The lot: crop, plants, harvestable_share, bunch_kg, maturity, days_since_flowering, expected_daily_mean_c (each a {low, mid, high} range where a range), fingers, chemicals, certificates, offer {farm_gate_price, order_kg, target {margin, max_p_loss}}, farmer_asks, farmer_consents, people. | |
| farm_id | Yes | A farm id from eudr_procurement_overview. |
Output Schema
| Name | Required | Description |
|---|---|---|
| readouts | No | |
| decisions | Yes | |
| assumptions | Yes | |
| decision_id | Yes | |
| farmer_view | No | |
| recommended | No | |
| rules_in_force | No | |
| process_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotation hints false, the description carries the full burden of behavioral disclosure, and it does so richly. It explains what is returned (decision per destination, chain-hold chance, P10/P50/P90 margin, max payable price, deal zone, farmer message without walk-away price), that defaults are surfaced as stated assumptions, that other crops are refused, and that the run is stored as a decision for later outcome recording. This gives the agent an unusually complete picture of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but nearly every sentence carries a distinct piece of needed information: outputs, defaults, crop restriction, persistence, and input sourcing. It is front-loaded with the core decision output before adding constraints and input guidance. A small amount of density prevents a perfect score, but there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity — nested lot object, multiple output dimensions, and no meaningful annotation hints — the description is complete enough for an agent to call it correctly. It covers inputs and their source, crop restrictions, what happens with defaults, the output categories, and the persistence side effect. Since an output schema exists, the description does not need to enumerate return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema. It directs the agent to send `lot` in the shape of `lot_example` from `eudr_procurement_overview`, and it clarifies an important interaction: the crop is taken from the farm's own record, not necessarily from the lot payload. This materially helps the agent construct correct arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Run the organisation's own buying process on a banana lot from one of its farms.' It goes beyond the title by specifying the concrete outputs per destination (GO / GO WITH CONDITIONS / NEEDS A PERSON / NO-GO, margins, price ceiling, deal zone) and the explicit 'Banana only' scope, which separates it from the other procurement/evidence tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: on banana lots from one of the organisation's farms, and it provides an explicit exclusion ('other crops are refused by name'). It also tells the agent where to get a valid `lot` shape: `lot_example` from `eudr_procurement_overview`. It does not name alternative tools or give a when-not-to-use scenario, but the crop constraint and input sourcing guidance make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_execution_traceShow how a verdict was reached, step by stepARead-onlyIdempotentInspect
The complete derivation chain behind a compiled statement, in order: polygon to grid addresses, signed measurements, the algorithm and the registries it was pinned against, cell verdicts to a consignment verdict, citations, and which of three independent keys signed what. A stage whose evidence is absent is reported as absent with its reason. Use it when someone asks how a result was reached rather than what it was.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task_id of a compile that has produced a statement. |
Output Schema
| Name | Required | Description |
|---|---|---|
| steps | Yes | A step either ran (stage, what, consumed, produced, signed_by, reproduce) or did not, in which case it carries present:false and why_absent. An absent stage is emitted, never omitted. |
| schema | Yes | |
| verify | No | |
| task_id | Yes | |
| verdict | No | |
| generated_at | No | |
| full_statement | No | |
| not_established | Yes | |
| signing_parties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint, idempotentHint, and destructiveHint already declared, the description adds valuable behavioral detail: it lists the exact stages in order, explains that absent evidence is reported as absent with a reason, and reveals provenance details such as three independent signing keys. This substantially exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the tool's purpose and enumerates the derivation chain compactly; the second adds a key behavioral trait and usage guidance. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only trace tool with one well-documented parameter and an output schema, the description covers purpose, ordering, evidence-absence behavior, and when to use it. No critical operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the task_id parameter is already well documented in the schema as the ID of a compile that produced a statement. The description does not need to add parameter-level detail and does not attempt to, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise purpose: it shows the complete derivation chain behind a compiled statement, with the steps in order. It explicitly frames the tool as answering how a result was reached, clearly distinguishing it from tools that report what the result is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The last sentence provides a clear usage trigger: use this tool when someone asks how a result was reached rather than what it was. It does not name a specific alternative tool, but the 'rather than what' contrast gives useful routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_export_statementExport a finished statement in the shape another system wantsARead-onlyIdempotentInspect
Export a compiled statement as TRACES NT submission XML, signed Annex II JSON, or plot boundaries as GeoJSON. Exporting is not filing: nothing is submitted to any authority. TRACES export is refused for a non-negligible verdict, because Article 4(1) bars placing those goods and a non-filable assessment must not be handed out as a submission document.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | `traces_xml` for the EUDR Information System submission shape, `annex_ii_json` for the signed statement, `plots_geojson` for the boundaries as a FeatureCollection. | |
| task_id | Yes | The task_id of a completed compile. | |
| activity | No | TRACES activity type. Defaults to the activity the statement was compiled with. |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | |
| task_id | Yes | |
| activity | No | |
| document | Yes | The exported document. A string for traces_xml, an object for the other two. |
| verify_at | No | |
| next_action | No | |
| receipt_cid | No | |
| download_url | No | |
| dds_reference | No | |
| signer_pubkey_b32 | No | |
| filed_with_any_authority | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safe/read-only nature is covered. The description adds the key behavioral nuance that exporting is not filing and introduces the conditional refusal for non-negligible verdicts when exporting to TRACES. This is valuable context beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. The first sentence front-loads the action and output formats; the second adds the filing clarification and the refusal condition. Every clause carries necessary information, and the structure is ideal for quick agent scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, an output schema, and strong annotations, the description provides all necessary operational context: what the tool does, what it doesn't do (filing), and a critical edge case (refusal). The output schema covers return shapes, and parameter details are fully described in the schema. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already explained in the input schema. The description repeats the format names and mentions 'signed' for JSON and 'FeatureCollection' for GeoJSON, but these details are also present in the schema descriptions. The description does not significantly add semantic value beyond what the schema already provides, justifying the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (export) on a specific resource (a compiled statement) and enumerates the three concrete output formats (TRACES NT submission XML, signed Annex II JSON, plot boundaries as GeoJSON). It also clarifies that this is not filing, distinguishing it from submission-oriented tools. This is precise and sets it apart from siblings like eudr_list_statements or eudr_prepare_dds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that exporting is not filing and nothing is submitted to any authority, which tells the agent when not to use this tool for filing purposes. It also warns that TRACES export is refused for a non-negligible verdict, implying an alternative format might be needed. However, it does not explicitly name alternative tools or provide explicit 'use this instead' guidance for the refused case, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_fetch_evidencePage the signed facts behind a checkARead-onlyIdempotentInspect
Retrieve the signed satellite facts behind a completed check, a page at a time, using the evidence_cid that check returned. Each entry is a content address that resolves at emem.dev and verifies offline against the responder's key. Use this when someone needs to audit or cite the evidence, not to summarise a result.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many facts to return, up to 200. Defaults to 50. | |
| offset | No | Index to start from. Defaults to 0. | |
| evidence_cid | Yes | The handle returned by eudr_check_plots. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| total | Yes | |
| offset | Yes | |
| returned | Yes | |
| algorithm | No | |
| fact_cids | Yes | |
| minted_at | No | |
| verify_at | No | |
| next_offset | No | |
| evidence_cid | Yes | |
| resolve_one_at | No | |
| responder_pubkey_b32 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: pagination ('a page at a time'), the fact that each entry is a content address resolving at emem.dev, and offline verification against the responder's key. This goes beyond the annotations and helps the agent understand the nature of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first states the core action and mechanism, the second explains the nature of the data, and the third gives usage guidance. It is front-loaded with the most important information and has no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 params, 1 required, output schema present), the description covers the key aspects: what it does, how to use it, when to use it, and the nature of the returned data. The output schema likely explains return values, so the description doesn't need to. The only minor gap is that it doesn't explicitly mention pagination parameters (limit/offset), but the schema covers those, so this is not a significant omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the key semantic link that evidence_cid is 'the handle returned by eudr_check_plots', which is useful context beyond the schema's 'The handle returned by eudr_check_plots' (though the schema already says this). The description doesn't add much beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve'), a specific resource ('signed satellite facts behind a completed check'), and a specific mechanism ('a page at a time, using the evidence_cid'). It also explicitly distinguishes itself from summarising a result, which helps differentiate it from sibling tools like eudr_compliance_status or eudr_execution_trace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: 'when someone needs to audit or cite the evidence, not to summarise a result.' This provides a clear usage context and an exclusion, which is strong guidance for an agent deciding between this and sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_get_ddsRead the outcome of a statement compileARead-onlyIdempotentInspect
Read the state of a compile started by eudr_prepare_dds. While it runs, returns the current state. Once finished, returns the verdict and the receipt's content address and signing key. The printable statement opens from the report_url that eudr_prepare_dds returned.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task_id returned by eudr_prepare_dds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | |
| state | Yes | |
| erased | No | |
| settled | No | |
| task_id | Yes | |
| verdict | No | |
| verify_at | No | |
| report_url | No | |
| next_action | No | |
| receipt_cid | No | |
| report_access | No | |
| signer_pubkey_b32 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, and the description adds real behavioral detail the annotations don't cover: the two-phase return behavior (transient state vs. final verdict plus content address and signing key). It doesn't mention polling cadence, terminal-state signaling, or failure/expiry behavior, which keeps it at 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then lifecycle behavior, then a pointer to the sibling for the printable output. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be enumerated, yet the description still tells the agent what each phase yields and where the printable statement actually comes from. For a one-parameter polling tool, an agent has everything needed to invoke and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already says it is 'the task_id returned by eudr_prepare_dds.' The description restates that provenance ('started by eudr_prepare_dds') but adds no format, lifetime, or reuse semantics, so the schema is doing the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read the state) and resource (a compile started by eudr_prepare_dds), and names the originating sibling tool so the agent knows where the task_id comes from. It also implicitly separates itself from eudr_export_statement by pointing at the report_url for the printable statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-phase framing ('while it runs… once finished…') clearly implies a polling pattern and tells the agent what to expect on each call. It stops short of stating explicitly that the tool should be called repeatedly until a terminal state, or naming rate/cadence expectations, so it's clear but not fully directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_import_shipmentsRead shipments out of a spreadsheet or GS1 event feedARead-onlyIdempotentInspect
Parse a consignment list into structured shipments ready to check. Accepts a CSV export (the column set eudr.dev publishes) or a GS1 EPCIS 2.0 JSON-LD document. Returns one row per shipment with supplier, commodity, country, quantity and plot boundaries, plus a warning for every row that could not be read and the reason. Nothing is stored and nothing is submitted; this only reads the document you pass.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many shipments to return in full, including plot boundaries. Defaults to 8, which is what eudr_check_plots accepts in one call. | |
| format | Yes | `csv` for the published column set, `epcis` for a GS1 EPCIS 2.0 JSON-LD document. | |
| offset | No | Which shipment to start detailing from. Totals always cover the whole document. | |
| document | Yes | The document itself. CSV text including its header row, or the EPCIS document as JSON text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| format | Yes | |
| offset | Yes | |
| stored | Yes | |
| warnings | Yes | |
| shipments | Yes | |
| next_action | Yes | |
| next_offset | No | |
| rows_skipped | Yes | |
| rows_returned | Yes | |
| shipments_read | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral guarantees beyond that: 'Nothing is stored and nothing is submitted; this only reads the document you pass,' plus the promise of per-row warnings for unreadable records. This gives the agent a precise side-effect and partial-failure model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, no filler, with the core action and accepted formats front-loaded, followed by output semantics and safety behavior. Every sentence earns its place; the title is redundant but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with rich annotations and an output schema, fully equips an agent to call the tool correctly: it knows inputs, output fields, failure behavior, read-only guarantees, and limits. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter descriptions already document format, document, limit, and offset fully. The description adds useful framing like 'the column set eudr.dev publishes' and 'GS1 EPCIS 2.0 JSON-LD document,' but these largely echo what the schema provides. It does not materially improve parameter understanding beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Parse a consignment list into structured shipments ready to check.' It explicitly states the accepted input formats (CSV export or GS1 EPCIS 2.0 JSON-LD) and the output shape (rows with supplier, commodity, country, quantity, plot boundaries, plus warnings). This distinguishes it from sibling check, evidence, and statement tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: use it when you have a spreadsheet or GS1 event feed that needs to become structured shipment records. The explicit 'Nothing is stored and nothing is submitted' also signals that this is safe pre-check ingestion. It does not name alternatives or state when not to use it, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_list_farmsList this organisation's farmsBRead-onlyIdempotentInspect
List the farms in this organisation's record: id, name, country, whether a boundary is confirmed and its area in hectares (geodesic, holes out), and how many EU statements were made for each. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| farms | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description restates 'Read-only' (redundant) but adds genuinely non-structured detail about the area field being geodesic with holes subtracted. With annotations carrying the behavioral burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the verb and resource before listing fields. It is slightly overloaded with parenthetical detail ('geodesic, holes out'), but every clause carries information and nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, full annotation coverage and an output schema present, this definition is essentially complete. The description even summarizes the return fields, which the output schema would have covered anyway, leaving no meaningful gap for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to explain. The description compensates by documenting the shape of the result set instead, which is the relevant information at this call site.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the farms in this organisation's record') and enumerates the fields returned, so the agent knows exactly what it gets. It does not explicitly differentiate itself from siblings such as eudr_check_plots or eudr_compliance_status, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no reference to alternatives among the 20 sibling tools. The 'Read-only' note hints at safe retrieval, but an agent gets no help deciding between this and tools like eudr_check_plots or eudr_compliance_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_list_statementsList the statements this organisation has compiledARead-onlyIdempotentInspect
List the Due Diligence Statements already in the signed-in organisation's account, newest first, with verdict, reference, commodity, country, quantity and date. Use this to answer what has been filed, what is outstanding, and what a past consignment concluded, rather than asking the user to re-enter details their account already holds.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return. Defaults to 20. | |
| country | No | Only statements for this country of production. | |
| verdict | No | Keep only the statements that reached this verdict. Leave it out for all of them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| returned | Yes | |
| statements | Yes | |
| organisation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds useful scope (organisation account, newest-first ordering) and listed return fields, but does not mention pagination limits or that limit filters results; with an output schema present, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, then the use case. No filler; length is proportionate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent list tool with an output schema and fully described parameters, the description is almost complete. It could mention that results are limited by default or how to paginate, but no critical information for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema describes each parameter (limit default 20, country pattern, verdict enum) plus the output schema. The description adds nothing about parameter semantics beyond the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (list) and resource (Due Diligence Statements), scopes it to the signed-in organisation, and enumerates the returned fields (verdict, reference, commodity, country, quantity, date). It is clearly distinguished from siblings like eudr_get_dds (single fetch) and eudr_prepare_dds (create).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for use: answering what has been filed, what is outstanding, and what a past consignment concluded, and explicitly discourages re-entering details. It does not name a specific sibling alternative (e.g. use eudr_get_dds for one statement), but the when-to-use is otherwise specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_list_supplier_requestsList outstanding supplier evidence requestsARead-onlyIdempotentInspect
List the supplier evidence requests this organisation has issued: who was asked, whether they responded, and when each request expires. Answers which suppliers still owe plot boundaries and production details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| pending | Yes | |
| requests | Yes | |
| submitted | Yes | |
| organisation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds that each record carries a response status and an expiry timestamp, which is helpful domain context. It says nothing about ordering, pagination, or whether expired requests are included, which is the main remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded, with no repetition of the title or annotation content. The scope statement comes first and the business question it answers comes second, which is the right order for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, no parameters, and full annotation coverage, the description need only convey scope and intent, which it does. The only missing piece is guidance on how the returned request list relates to the gap-assessment workflow, which would help an agent choose between the two tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case: there is nothing for the description to disambiguate and no risk of mis-invocation from undocumented arguments. It correctly does not invent parameters or filtering options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List the supplier evidence requests this organisation has issued') and adds the exact fields returned: requester, response status, and expiry date. It implicitly contrasts with eudr_request_supplier_evidence by focusing on already-issued requests, but never names that sibling or any other alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing 'Answers which suppliers still owe plot boundaries and production details' implies the scenario in which to reach for this tool, which is useful. However, there is no explicit when-to-use/when-not statement and no pointer to a related tool such as eudr_assess_evidence_gaps, so the agent must infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_lookup_referenceLook up country risk, Annex I commodities, ports and trade lanesARead-onlyIdempotentInspect
Look up the country benchmark tier under Implementing Regulation (EU) 2025/1093, the Annex I commodity to HS-code mapping under Regulation (EU) 2023/1115, the seaports and airports a consignment can leave or enter through (UN/LOCODE), or which countries actually supply the Union with each commodity and in what volume (UN Comtrade 2023, with World Bank indicator prices). Returns the table this engine evaluates against, with its source and the date it was verified.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | `country_risk` for the benchmark tiers, `commodities` for the Annex I mapping, `ports` for UN/LOCODE seaports and airports, `trade` for who supplies the Union with what. | |
| country | No | With kind=country_risk, return just this country's tier instead of the whole table. With kind=ports, return just that country's seaports and airports instead of the Union's points of entry. | |
| commodity | No | With kind=trade, return just this Annex I commodity's import lanes instead of all seven. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| tier | No | |
| basis | No | |
| country | No | |
| low_risk | No | |
| high_risk | No | |
| reference | No | |
| commodities | No | |
| simplified_due_diligence_available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely non-redundant behavior: provenance (source regulation, UN Comtrade 2023, World Bank indicator prices) and the fact that it returns a verification date, which signals a static snapshot rather than live data. Missing only pagination or table-size behavior, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the verb and the four branches, then the return contract. It is dense and could be broken into a bulleted list for the four kinds, but nothing is filler and the scope is stated before the return behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return structure need not be explained, yet the description still adds the source/verification-date contract. With full param coverage and clear enum routing, the only material omission is guidance on when in a compliance workflow to reach for this lookup versus the assessment siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the four kind branches but adds no syntax or format detail beyond what the enum descriptions already carry; the regulatory citations enrich context but not parameter meaning. The optional country/commodity narrowing is documented only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb ('Look up') and enumerates the four distinct reference tables (country risk tiers, Annex I HS-code mapping, UN/LOCODE ports, trade lanes) with their governing regulations. An agent can immediately tell this apart from the operational siblings like eudr_compliance_status or eudr_check_plots, which assess data rather than fetch the static tables the engine evaluates against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The four 'kind' branches imply the usage context (reference data underlying the engine), but there is no explicit when-to-use, when-not-to-use, or naming of any alternative tool. An agent must infer that this is the lookup layer for values returned by the compliance tools, rather than being told to consult it before/after running an assessment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_mitigation_statusArticle 11 mitigation: what is outstandingARead-onlyIdempotentInspect
Report the Article 11 risk-mitigation plans this organisation has open against flagged shipments: which steps are outstanding, which article each discharges, whether a step needs a person or can be re-run automatically, and what evidence has been recorded. A non-negligible verdict creates an obligation under Article 11 to act before the product is placed on the market; this answers how far that has got. Pass a shipment id for one plan, or omit it for everything still open. Read-only — recording a decision is a deliberate human act and is done on eudr.dev, because Article 11(3) requires mitigation decisions to be documented and demonstrable; eudr.dev records each against the named person who made it, which is our choice rather than the Regulation's wording.
| Name | Required | Description | Default |
|---|---|---|---|
| shipment_id | No | Optional. One shipment's plan; omit for every open plan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| plans | Yes | |
| open_plans | Yes | |
| organisation | Yes | |
| outstanding_steps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint and destructiveHint already cover safety, the description adds value beyond annotations: it clarifies that only open plans are returned, explains what the report contains, and discloses why recording is not possible here (Article 11(3) documentation, named-person attribution). This is substantive behavioral context rather than a restatement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and the parameter guidance is placed before the regulatory rationale. Every sentence adds information, though the final sentence about eudr.dev and 'our choice rather than the Regulation's wording' could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, nothing an agent needs to use the tool correctly is missing: it covers the report's contents, the one-vs-all parameter behavior, and the read-only boundary. The regulatory context also helps the agent judge whether this is the right tool for the user's intent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes shipment_id as optional and explains the omit behavior, so coverage is 100%. The description repeats the same guidance without adding new detail such as formats or examples, so it stays at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is built around a specific verb, 'Report', a precise resource ('Article 11 risk-mitigation plans ... open against flagged shipments'), and enumerates the exact content (outstanding steps, discharged article, automation, evidence). This makes it easy to distinguish from sibling tools such as eudr_compliance_status or eudr_execution_trace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit invocation guidance: 'Pass a shipment id for one plan, or omit it for everything still open', and states the read-only boundary with recording deliberately delegated to eudr.dev. It does not name any sibling tool as an alternative, but the context ('this answers how far that has got') clearly frames when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_prepare_ddsStart preparing a Due Diligence StatementADestructiveInspect
Compile and sign an Annex II Due Diligence Statement. This WRITES: it stores a compile task holding the operator and supplier details you pass, and sends the plot geometry, HS code, country and quantity to emem.dev to be measured and independently signed. Operator and supplier identity are not forwarded upstream. Returns a task handle; read the outcome with eudr_get_dds. For an organisation's statement it also makes one revocable share link, valid for 7 days, so report_url opens in a browser that is not signed in to eudr.dev; the organisation can withdraw it from its account. Nothing is filed with any authority. Confirm the details with the user first. Costs 5 credits from the organisation's wallet (from 30 October 2026, plus 1 for each plot after the first), refunded automatically if the compile fails; every other tool here is free.
| Name | Required | Description | Default |
|---|---|---|---|
| product | Yes | What is being placed on the market: its HS code, what it is in words, and its net mass (Annex II point 2). | |
| operator | Yes | Who places the goods on the EU market and answers for this statement (Annex II point 1). Not forwarded to the satellite service. | |
| producer | No | The primary producer, where that is not the supplier. | |
| supplier | Yes | Who the goods were bought from, as the operator's own records name them. Not forwarded to the satellite service. | |
| geolocation | Yes | Where it was produced and when it was harvested (Annex II point 3). The plot geometry, country, HS code and quantity are the only things sent to the satellite service. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | No | |
| task_id | Yes | |
| report_url | Yes | |
| next_action | Yes | |
| data_stored_here | Yes | |
| read_outcome_with | Yes | |
| data_sent_upstream | Yes | |
| report_link_expires_at | No | |
| filed_with_any_authority | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: which fields are forwarded to the external provider and which are withheld (operator/supplier identity), that a revocable 7-day share link is minted for organisations, that nothing is filed with an authority, and the credit cost with refund-on-failure. This substantially softens the destructiveHint=true alert by explaining what is and is not actually at stake.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the write semantics and outcome path before the secondary share-link and pricing detail, and nearly every sentence carries operational weight. The dated credit-pricing clause is verbose, though it is real cost information an agent should surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a costly, non-idempotent, externally-visible mutation with nested parameters, the description covers the async task model, the follow-up tool, privacy boundaries, billing, and the reassurance that no regulatory filing occurs. An output schema exists, so not explaining the return shape beyond 'a task handle' is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description adds a genuinely useful data-flow layer by naming exactly which inputs (plot geometry, HS code, country, quantity) leave the system, which no field description states. It does not, however, explain the operator/supplier/product/geolocation split beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artefact ('Compile and sign an Annex II Due Diligence Statement') and immediately frames it as the start of a task whose outcome is read elsewhere. An agent can distinguish it from eudr_get_dds and eudr_export_statement from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit handoff ('read the outcome with eudr_get_dds') and an explicit interaction rule ('Confirm the details with the user first'), plus a cost contrast against every other free tool. It stops short of saying when to use it instead of prerequisite siblings like eudr_check_plots or eudr_assess_evidence_gaps before compiling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_procurement_overviewBuying decisions across this organisation's farmsARead-onlyIdempotentInspect
List the organisation's farms and its recent buying decisions (GO / GO WITH CONDITIONS / NEEDS A PERSON / NO-GO per destination), with which carry a recorded outcome and which were overridden. Use it to find a farm id before eudr_decide_lot, or to see how decisions have turned out. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| farms | Yes | |
| counts | Yes | |
| decisions | Yes | |
| lot_example | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds behavioral context by specifying the scope ('across this organisation's farms'), the decision statuses included, and the fact that it includes both recorded outcomes and overridden decisions. It doesn't describe pagination or return format, but the output schema exists and the description is otherwise transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core listing purpose, then the decision statuses, then the use cases. Every sentence earns its place; no fluff or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema, the description is complete. It tells the agent what data is returned, how to use it (find farm id, review outcomes), and that it is safe to call. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. The description adds meaning by explaining what the returned data represents (farms and buying decisions with statuses), which is more than the empty schema provides. Baseline for 0 params is 4, and the description earns it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the organisation's farms and recent buying decisions with specific decision outcomes (GO / GO WITH CONDITIONS / NEEDS A PERSON / NO-GO), and notes which have recorded outcomes and which were overridden. It distinguishes itself from siblings by naming eudr_decide_lot as a follow-up use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it: to find a farm id before eudr_decide_lot, or to see how decisions have turned out. It also states it is read-only, which helps an agent avoid using it for mutation purposes. It doesn't explicitly name alternatives to avoid, but the use cases are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_request_supplier_evidenceAsk a supplier for their plot evidenceAInspect
Create a one-time link a supplier can use to submit their plot boundaries and production details straight into this organisation's account, without needing an account of their own. This writes: it creates a credential that lets whoever holds the link submit data to you, and returns that link once. Send it only to the intended supplier. No email is sent by this call.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Optional, recorded so you can see where the link was meant to go. It is not verified and nothing is sent to it. | ||
| supplier_name | Yes | Your name for the counterparty, shown to them on the intake page. | |
| valid_for_days | No | How long the link works. Defaults to 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| emailed | Yes | |
| supplier | Yes | |
| expires_at | Yes | |
| intake_url | Yes | |
| request_id | Yes | |
| shown_once | Yes | |
| next_action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint false, and the description reinforces this by saying 'This writes: it creates a credential'. It further discloses that the link is one-time, returns only once, and that no email is sent—providing valuable behavioral context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the core action, and includes critical caveats in just a few sentences. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description is complete. It explains the purpose, write nature, one-time behavior, and the no-email detail, covering everything an agent needs to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters clearly. The description adds no additional parameter meaning (e.g., it does not elaborate on valid_for_days or email beyond what the schema says). Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('one-time link'), and clearly explains the purpose: letting a supplier submit evidence without an account. It differentiates from siblings like eudr_list_supplier_requests (listing) and eudr_fetch_evidence (fetching) by its action and context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need to collect evidence from a supplier) and adds cautions ('Send it only to the intended supplier', 'No email is sent'). However, it does not explicitly name alternatives or state when not to use it, so it lacks explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_set_farm_boundarySet a farm's boundaryADestructiveInspect
Set the boundary of a farm already in the record, as boundary (GeoJSON Polygon or MultiPolygon) or as fields to join into one farm (see eudr_create_farm). It becomes the farm's confirmed boundary, recorded as set by this agent credential, and what follows runs at once: the country from where the land lies, the forest record warmed, the land check. This writes to the organisation's record, and REPLACES any boundary the farm already had: the previous outline stops being the farm's boundary, and because the boundary decides which land is checked, the compliance answers and the area derived from it change with it. The superseded outline is kept in the farm's history and can be read back, but this call does not undo on its own — confirm with the user before overwriting a boundary somebody else set.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Several field outlines to join into one farm, as GeoJSON Polygons. Give this or `boundary`. | |
| join_m | No | How far apart two field outlines may be and still count as one farm, in metres each way. Default 3. | |
| farm_id | Yes | The farm whose boundary this is, as `eudr_create_farm` or `eudr_list_farms` returned it. | |
| boundary | No | The outline, as a GeoJSON Polygon or MultiPolygon, longitude first. Give this or `fields`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| then | No | |
| area_ha | Yes | |
| farm_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false; the description goes further by stating exactly what is destroyed (the previous outline stops being the boundary), what the effects are (compliance answers and area change), that the superseded outline is kept in history, and that the call does not undo on its own. This is rich behavioral context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and modes, then sequences consequences and warnings. Somewhat dense with subordinate clauses, but every sentence carries load. Not maximally tight but appropriate for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need not be explained. The description covers the mutation, its destructive effects, history retention, and a user-confirmation warning, which is complete for a destructive, non-idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds interpretation of 'boundary' vs 'fields' (GeoJSON Polygon/MultiPolygon, joining into one farm) that helps the agent understand the semantics, though it largely restates what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('set the boundary of a farm') and distinguishes the two input modes (boundary vs fields) that map to the siblings eudr_create_farm context. Differentiated from other tools by clarifying it acts on an existing farm in the record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two modes of providing input, references eudr_create_farm for farm creation, and includes an explicit precondition ('confirm with the user before overwriting a boundary somebody else set'). This is when-to-use guidance with an exclusion/warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eudr_verify_receiptVerify a signed statement receiptARead-onlyIdempotentInspect
Verify a statement receipt: re-derive its content address from the canonical payload and check the ed25519 signature. Use it on a receipt a counterparty hands you. A valid signature establishes who signed and that the bytes are unchanged; it does not establish that the claim inside is true.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | The receipt as issued: schema, cid, payload, canonical_b64, signature_b64, signer, signed_at. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cid | No | |
| note | Yes | |
| valid | Yes | |
| reason | No | |
| signer | No | |
| signed_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses meaningful behavioral nuance: a valid signature establishes who signed and that bytes are unchanged, but 'does not establish that the claim inside is true.' This helps the agent set correct expectations and avoids overinterpretation of verification results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no redundant filler, and the core operation is front-loaded. Each sentence earns its place: what it does, when to use it, and what the result does and does not mean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter with full schema coverage and an output schema, so return details need no elaboration. The description covers operation, use case, and important interpretive caveats—everything an agent needs to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining how the receipt fields are used: re-deriving the content address from the canonical payload and checking the ed25519 signature. This gives semantic meaning to fields like canonical_b64 and signature_b64 beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Verify a statement receipt' and goes further by explaining the mechanism—'re-derive its content address from the canonical payload and check the ed25519 signature.' This clearly distinguishes the tool from sibling statement-management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: 'Use it on a receipt a counterparty hands you.' It indicates the intended input source and scenario, though it does not explicitly name alternative tools or state when not to use it. This is a clear usage context but lacks formal exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
eudr_prepare_dds2 fields changed- changed
Input schema / properties / operator / properties / role / enumPrevious value: -[ - "operator", - "non_sme_trader", - "downstream_operator", - "sme_trader" -]New value: +[ + "operator", + "trader_as_operator", + "downstream_operator", + "sme_trader" +] - removed
Input schema / properties / product / properties / scope_evidenceRemoved value: -{ - "additionalProperties": false, - "description": "Needed when the HS code meets an \"ex\" Annex I row (live cattle, palm oil, most wood and rubber) or is wider than its row: the document that shows the product is, or is not, what the row describes. The compile refuses such a code without it and names the row.", - "properties": { - "annex_i_code": { - "description": "The row as printed, e.g. 1511.", - "type": "string" - }, - "document_id": { - "type": "string" - }, - "within_clause": { - "type": "boolean" - } - }, - "required": [ - "document_id", - "annex_i_code", - "within_clause" - ], - "type": "object" -}
1 tool update
- Changed
eudr_prepare_dds2 fields changed- changed
Input schema / properties / operator / properties / role / enumPrevious value: -[ - "operator", - "trader_as_operator", - "downstream_operator", - "sme_trader" -]New value: +[ + "operator", + "non_sme_trader", + "downstream_operator", + "sme_trader" +] - added
Input schema / properties / product / properties / scope_evidenceAdded value: +{ + "additionalProperties": false, + "description": "Needed when the HS code meets an \"ex\" Annex I row (live cattle, palm oil, most wood and rubber) or is wider than its row: the document that shows the product is, or is not, what the row describes. The compile refuses such a code without it and names the row.", + "properties": { + "annex_i_code": { + "description": "The row as printed, e.g. 1511.", + "type": "string" + }, + "document_id": { + "type": "string" + }, + "within_clause": { + "type": "boolean" + } + }, + "required": [ + "document_id", + "annex_i_code", + "within_clause" + ], + "type": "object" +}
1 tool update
- Changed
eudr_list_supplier_requests1 field changed- added
Output schema / properties / requests / items / propertiesAdded value: +{ + "days_left": { + "description": "Whole days until the link stops working; 0 once expired, null once answered or withdrawn.", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "state": { + "enum": [ + "open", + "expires soon", + "expired", + "answered", + "withdrawn" + ], + "type": "string" + } +}
2 tool updates
- Changed
eudr_get_dds1 field changed- added
Output schema / properties / report_accessAdded value: +{ + "type": "string" +}
- Changed
eudr_prepare_dds2 fields changed- added
Output schema / properties / report_link_expires_atAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / report_url / typePrevious value: -"string"New value: +[ + "string", + "null" +]
2 tool updates
- Changed
eudr_check_plots1 field changed- changed
Input schema / properties / plots / items / properties / plot_id / descriptionPrevious 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)."
- Changed
eudr_prepare_dds1 field changed- changed
Input schema / properties / geolocation / properties / plot_id / descriptionPrevious value: -"The primary plot's own identifier (a field, cadastral or cooperative code)."New value: +"The primary plot's own identifier (a field, cadastral or cooperative code) — never a person's name: it is carried into a signed, public, append-only fact at the evidence provider."
6 tool updates
- Changed
eudr_assess_evidence_gaps1 field changed- added
Input schema / properties / suppliers / descriptionAdded value: +"The suppliers to weigh up, each with what is already held about them. One entry per supplier."
- Changed
eudr_check_plots1 field changed- added
Output schema / properties / verdict / descriptionAdded value: +"Keep only statements that reached this verdict. Leave it out for all of them."
- Changed
eudr_create_farm5 fields changed- added
Input schema / properties / crop / descriptionAdded value: +"What grows there, in plain words (`cocoa`, `coffee`, `oil palm`). It decides whether the EU deforestation rules apply at all." - added
Input schema / properties / join_m / descriptionAdded value: +"How far apart two field outlines may be and still be treated as one farm, in metres each way. Default 3, which closes the bunds and tracks between neighbouring parcels." - added
Input schema / properties / lat / descriptionAdded value: +"A pin on the farm, in WGS84 degrees. Use it when no boundary is known." - added
Input schema / properties / lon / descriptionAdded value: +"The pin's longitude, WGS84 degrees. GeoJSON order is longitude first; this field is not." - added
Input schema / properties / name / descriptionAdded value: +"What the farm is called, as the buyer and the farmer would say it."
- Changed
eudr_list_statements1 field changed- added
Input schema / properties / verdict / descriptionAdded value: +"Keep only the statements that reached this verdict. Leave it out for all of them."
- Changed
eudr_prepare_dds4 fields changed- added
Input schema / properties / geolocation / descriptionAdded value: +"Where it was produced and when it was harvested (Annex II point 3). The plot geometry, country, HS code and quantity are the only things sent to the satellite service." - added
Input schema / properties / operator / descriptionAdded value: +"Who places the goods on the EU market and answers for this statement (Annex II point 1). Not forwarded to the satellite service." - added
Input schema / properties / product / descriptionAdded value: +"What is being placed on the market: its HS code, what it is in words, and its net mass (Annex II point 2)." - added
Input schema / properties / supplier / descriptionAdded value: +"Who the goods were bought from, as the operator's own records name them. Not forwarded to the satellite service."
- Changed
eudr_set_farm_boundary4 fields changed- added
Input schema / properties / boundary / descriptionAdded value: +"The outline, as a GeoJSON Polygon or MultiPolygon, longitude first. Give this or `fields`." - added
Input schema / properties / farm_id / descriptionAdded value: +"The farm whose boundary this is, as `eudr_create_farm` or `eudr_list_farms` returned it." - added
Input schema / properties / fields / descriptionAdded value: +"Several field outlines to join into one farm, as GeoJSON Polygons. Give this or `boundary`." - added
Input schema / properties / join_m / descriptionAdded value: +"How far apart two field outlines may be and still count as one farm, in metres each way. Default 3."
1 tool update
- Changed
eudr_lookup_reference2 fields changed- added
Input schema / properties / commodityAdded value: +{ + "description": "With kind=trade, return just this Annex I commodity's import lanes instead of all seven.", + "enum": [ + "cocoa", + "coffee", + "rubber", + "soya", + "oil_palm", + "cattle", + "wood" + ], + "type": "string" +} - changed
Input schema / properties / kind / descriptionPrevious value: -"`country_risk` for the benchmark tiers, `commodities` for the Annex I mapping."New value: +"`country_risk` for the benchmark tiers, `commodities` for the Annex I mapping, `ports` for UN/LOCODE seaports and airports, `trade` for who supplies the Union with what."
2 tool updates
- Changed
eudr_check_plots2 fields changed- changed
Input schema / properties / commodity / descriptionPrevious 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." - removed
Input schema / properties / commodity / enumRemoved value: -[ - "cattle", - "cocoa", - "coffee", - "oil_palm", - "rubber", - "soya", - "wood" -]
- Changed
eudr_lookup_reference2 fields changed- changed
Input schema / properties / kind / enumPrevious value: -[ - "country_risk", - "commodities", - "ports" -]New value: +[ + "country_risk", + "commodities", + "ports", + "trade" +] - changed
Output schema / properties / kind / enumPrevious value: -[ - "country_risk", - "commodities", - "ports" -]New value: +[ + "country_risk", + "commodities", + "ports", + "trade" +]
2 tool updates
- Changed
eudr_check_plots2 fields changed- added
Output schema / properties / deforestation_free / descriptionAdded 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." - changed
Output schema / properties / deforestation_free / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +]
- Changed
eudr_lookup_reference3 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"With kind=country_risk, return just this country's tier instead of the whole table."New value: +"With kind=country_risk, return just this country's tier instead of the whole table. With kind=ports, return just that country's seaports and airports instead of the Union's points of entry." - changed
Input schema / properties / kind / enumPrevious value: -[ - "country_risk", - "commodities" -]New value: +[ + "country_risk", + "commodities", + "ports" +] - changed
Output schema / properties / kind / enumPrevious value: -[ - "country_risk", - "commodities" -]New value: +[ + "country_risk", + "commodities", + "ports" +]
1 tool update
- Changed
eudr_check_plots1 field changed- added
Output schema / properties / plots_not_checkedAdded 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" +}
1 tool update
- Changed
eudr_check_plots2 fields changed- changed
Input schema / properties / plots / descriptionPrevious 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." - changed
Input schema / properties / plots / maxItemsPrevious value: -25New value: +6
1 tool update
- Changed
eudr_account_usage2 fields changed- added
Output schema / properties / credits_per_extra_plotAdded value: +{ + "description": "Added for each plot after the first, from per_plot_pricing_from.", + "type": "integer" +} - added
Output schema / properties / per_plot_pricing_fromAdded value: +{ + "format": "date", + "type": "string" +}
2 tool updates
- Changed
eudr_check_plots1 field changed- changed
Input schema / properties / plots / maxItemsPrevious value: -8New value: +25
- Changed
eudr_prepare_dds2 fields changed- added
Input schema / properties / geolocation / properties / additional_plotsAdded value: +{ + "description": "Every further plot of the consignment. Each is measured and filed on its own; the consignment is negligible only if every plot is.", + "items": { + "additionalProperties": false, + "properties": { + "country": { + "description": "Only when the plot lies in another country than the consignment's.", + "pattern": "^[A-Za-z]{2}$", + "type": "string" + }, + "harvest_window": { + "type": "string" + }, + "plot_geojson": { + "description": "GeoJSON Polygon, MultiPolygon or Point in WGS84.", + "type": "object" + }, + "plot_id": { + "maxLength": 64, + "type": "string" + }, + "quantity_kg": { + "description": "This plot's share; omitted, the rest of the consignment is split evenly.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "plot_id", + "plot_geojson" + ], + "type": "object" + }, + "maxItems": 500, + "type": "array" +} - added
Input schema / properties / geolocation / properties / plot_idAdded value: +{ + "description": "The primary plot's own identifier (a field, cadastral or cooperative code).", + "maxLength": 64, + "type": "string" +}
3 tool updates
- Added
eudr_create_farm - Added
eudr_list_farms - Added
eudr_set_farm_boundary
1 tool update
- Changed
eudr_procurement_overview2 fields changed- added
Output schema / properties / lot_exampleAdded value: +{ + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "decisions", - "counts", - "farms" -]New value: +[ + "decisions", + "counts", + "farms", + "lot_example" +]
2 tool updates
- Added
eudr_decide_lot - Added
eudr_procurement_overview
1 tool update
- Changed
eudr_assess_evidence_gaps2 fields changed- changed
Input schema / properties / suppliers / items / properties / address / descriptionPrevious value: -"Postal address (Article 9(1)(d))."New value: +"Postal address (Article 9(1)(e))." - changed
Input schema / properties / suppliers / items / properties / email / descriptionPrevious value: -"Email address (Article 9(1)(d))."New value: +"Email address (Article 9(1)(e))."
16 tool updates
- First observed
eudr_account_usage - First observed
eudr_assess_evidence_gaps - First observed
eudr_check_plots - First observed
eudr_compliance_status - First observed
eudr_execution_trace - First observed
eudr_export_statement - First observed
eudr_fetch_evidence - First observed
eudr_get_dds - First observed
eudr_import_shipments - First observed
eudr_list_statements - First observed
eudr_list_supplier_requests - First observed
eudr_lookup_reference - First observed
eudr_mitigation_status - First observed
eudr_prepare_dds - First observed
eudr_request_supplier_evidence - First observed
eudr_verify_receipt
Related MCP Connectors
Screen farm plots for EUDR deforestation risk with the official EU JRC maps.
Validate emissions data against Open Footprint, check EU CBAM records, query verified methane data
Source-reconciled U.S. environmental facility compliance evidence for AI agents.
Looks up the Rural Environmental Registry (CAR) of a property from the CAR number. Platform-hosted,
Related MCP Servers
- AlicenseBqualityBmaintenanceAutonomous AI Agent compliance engine for EU Deforestation Regulation (EU 2023/1115). Verifies farm plot GIS polygons, Sentinel-2 satellite deforestation past 2020, VIES VAT, and generates official TRACES-NT DDS XML.41MIT
- AlicenseBqualityBmaintenanceProvides sovereign geospatial awareness by wrapping open, non-US-dependent geospatial APIs for AI-agent situational awareness, environmental compliance, and disaster response.555 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceAnalyzes early government notices to produce an evidence-backed map of plausible supplier companies with deterministic scoring and exact citation validation.MIT
- AlicenseBqualityBmaintenanceEnables AI agents to analyse rural land plots in Europe, returning computed figures and sources for checks such as flood risk, noise, sunlight, access, planning, and land-register data. It also supports managing saved plots, reports, folders, and listings.20MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.