# eudr.dev > EU Deforestation Regulation (Reg. (EU) 2023/1115) compliance agent for AI agents and human operators. JSON-in, JSON-out, stateless, ed25519-signed receipts anchored as CIDv1. The eudr.dev runtime is closed; emem (https://github.com/Vortx-AI/emem), the Earth-memory protocol it reads its evidence from, is open source. Both are operated by Vortx AI Private Limited. ## For AI agents: token-conscious endpoints - [GET /a2a/tasks/{id}?slim=true](https://eudr.dev/a2a/tasks/x?slim=true): Slim mode. Drops the 4 000+ entry `per_cell` array and per-plot `visual_evidence` from the receipt while keeping verdict, manifest CIDs, per-plot summary, methodology, and any flagged cells (verdict-bearing, never truncated). 2 MB → ~100 KB on a polygon-fully-sampled plot. The slim payload is **independently signed**: response carries a `slim_receipt` block with its own CID + ed25519 signature + canonical bytes, verifiable offline without re-fetching the full payload. The full receipt CID (task.receipt_cid) still binds the complete audit trail; either CID is a valid Article 12 retention anchor. - Optional `&max_flagged=N` caps the flagged-cell sample (default 50). - Re-fetch without `?slim=true` for the complete audit trail. ## Agent surface (/v1/*) - [POST /v1/spatial/verify](https://eudr.dev/v1/spatial/verify): GeoJSON polygon + commodity + ISO country → deforestation-free verdict + evidence CID. - [POST /v1/dds/generate](https://eudr.dev/v1/dds/generate): operator + supplier + product + geolocation → signed Annex II Due Diligence Statement. Polygon-fully-sampled (51 200 cell budget per plot). Operator and supplier identity are NOT forwarded to emem: the upstream call carries plot geometry, HS code, country and quantity only, and the chain of custody is attributed inside the engine's own signed receipt. See /privacy. Receipt cites four content-addressed CIDs (algorithms_cid, bands_cid, schema_cid, registry_cid) for offline replay. - [POST /v1/receipt/verify](https://eudr.dev/v1/receipt/verify): signed receipt JSON → boolean + re-derived CID + signer pubkey. - [GET /v1/reference/countries](https://eudr.dev/v1/reference/countries): Implementing Reg. (EU) 2025/1093 country risk tiers. Cacheable. - [GET /v1/reference/commodities](https://eudr.dev/v1/reference/commodities): Annex I commodity → HS prefix mapping. Cacheable. - [GET /v1/tools.json](https://eudr.dev/v1/tools.json): Both catalogs in one document. `mcp.tools` and `mcp.prompts` are derived from what the MCP endpoint serves; `tools` lists the REST operations below. They are different surfaces with different names, which this file used to obscure by claiming one mirrored the other. - [GET /v1/evidence/{evidence_cid}](https://eudr.dev/v1/evidence/x): Page the signed fact set behind a check. A verify response carries the address rather than the list, because on a real plot the list is the overwhelming majority of the body. The address identifies THAT response's evidence and is not a fingerprint of the question: emem signs each fact with the moment it was signed, so re-running the same check returns the same measurements under new addresses. For a citation that must outlive a day, cite the statement's receipt CID. - [GET /v1/trace/{task_id}](https://eudr.dev/v1/trace/x): The complete derivation chain behind a compiled statement, in order: polygon to cell64 addresses, addresses to signed measurements, algorithm against pinned registries, cells to a consignment verdict, citations, the independent guard verdict, the engine signature, the transparency-log anchor. Three different keys sign parts of that chain and `signing_parties` keeps them separate. A stage whose evidence is absent is emitted as absent WITH its reason rather than omitted, and `not_established` states what the chain does not show. ## Model Context Protocol - **POST https://eudr.dev/mcp** — a remote MCP endpoint, no account and no credential. Dual-era: it answers the `initialize` handshake used up to revision 2025-11-25 and the stateless 2026-07-28 form with `server/discover`, per-request `_meta` protocol version, `resultType`, `ttlMs`/`cacheScope`, and `Mcp-Method`/`Mcp-Name` validated against the body. POST only; GET answers 405. - Ten tools. `eudr_check_plots`, `eudr_fetch_evidence`, `eudr_assess_evidence_gaps`, `eudr_lookup_reference`, `eudr_verify_receipt`, `eudr_prepare_dds`, `eudr_get_dds`, `eudr_execution_trace`, `eudr_import_shipments`, `eudr_export_statement`. Every one declares all four annotation hints and an `outputSchema`; every input schema is closed. Exactly one writes (`eudr_prepare_dds`), and its description names what leaves this service when it runs. - Four prompts. `check_plots`, `supplier_gaps`, `evidence_pack`, `verify_counterparty` — each carrying the ordering that makes a compliance answer correct: plots before paperwork, coverage read rather than only the verdict, stop on a failing plot instead of assembling a pack around it. - The advertised catalog IS the reachable surface. A tool name that `tools/list` does not carry is refused, so there is no meta layer behind it. Connection details: [/.well-known/mcp.json](https://eudr.dev/.well-known/mcp.json). ## Import and export - Shipments in: a CSV export in the published column set, or a GS1 EPCIS 2.0 JSON-LD document. Rows that cannot be read are skipped and counted with a reason, never guessed at. Nothing is stored by the import. - Statements out: TRACES NT submission XML, the signed Annex II JSON, or the plot boundaries as GeoJSON. TRACES export is refused for a statement whose verdict is not negligible, because Art. 4(1) bars placing those goods and a non-filable assessment must not be handed out as a submission document. Exporting is never filing. ## Plain answers about the Regulation (/kb/*) Written for a person or an answer engine, not for this API: [what the EUDR is](https://eudr.dev/kb/what-is-eudr), [key dates](https://eudr.dev/kb/key-dates-timeline), [commodities and HS codes](https://eudr.dev/kb/commodities-and-hs-codes), [geolocation requirements](https://eudr.dev/kb/geolocation-requirements), [due diligence in three steps](https://eudr.dev/kb/due-diligence-3-steps), [operator vs trader vs downstream](https://eudr.dev/kb/operator-vs-trader-vs-downstream), [country benchmarking](https://eudr.dev/kb/country-benchmarking), [anatomy of a DDS and its receipts](https://eudr.dev/kb/dds-anatomy-and-receipts), [TRACES NT submission](https://eudr.dev/kb/traces-nt-submission), [penalties and enforcement](https://eudr.dev/kb/penalties-and-enforcement), [common pitfalls](https://eudr.dev/kb/common-pitfalls), [sources and references](https://eudr.dev/kb/sources-and-references), [glossary](https://eudr.dev/kb/glossary). Index at [https://eudr.dev/kb](https://eudr.dev/kb). ## Earth-memory proxies (/api/emem/*) These are same-origin proxies to emem.dev, the Earth-memory protocol supplying the per-cell signed facts the DDS pipeline composes. Every response is content-addressed and dereferenceable via /v1/facts/{cid} on emem.dev. - [POST /api/emem/ask](https://eudr.dev/api/emem/ask): Single-shot packaged answer for a place. q (≤512 chars) + place|cell|lat+lng → topic_routing, facts, algorithm_outcomes with input_fact_cids. The report's Earth-memory forensics strip (foundation-encoder change consensus, cross-modal S1⨂S2 consistency, wildfire/burn, wetland Art. 2(13) binary, EO harvest detection, land-degradation, canopy chlorophyll, soil moisture, SOC) is built on this. - [POST /api/emem/polygon](https://eudr.dev/api/emem/polygon): Polygon-area band recall with optional include=['ftw_fields'] for Fields of The World per-field polygons (CC-BY-4.0). - [POST /api/emem/field_boundaries](https://eudr.dev/api/emem/field_boundaries): FTW per-field polygons inside a bbox (cap 10 000 ha). - [GET /api/emem/scene_at?lat=&lng=](https://eudr.dev/api/emem/scene_at): Sentinel-2 RGB 256×256 thumbnail at a centroid. Used by the home-page sample picker. - [GET /api/emem/cells/{cell}/scene.png](https://eudr.dev/api/emem/cells/x/scene.png): Same chip, addressed by cell64. - [GET /api/emem/capabilities](https://eudr.dev/api/emem/capabilities): Live emem GPU/encoder tier snapshot (Clay, Prithvi, Galileo, Tessera). - [GET /api/emem/bands/{family}?lat=&lng=](https://eudr.dev/api/emem/bands/elevation): Point-band shorthand for elevation / weather / lst / soil / ndvi / forest / water. - [GET /api/emem/data_availability?lat=&lng=](https://eudr.dev/api/emem/data_availability): Which bands materialise at a point — call before a 2-3 min eudr_dds run. - [POST /api/emem/coverage_matrix](https://eudr.dev/api/emem/coverage_matrix): Per-cell × per-band signed-fact availability matrix for a cell list. ## Discovery - [GET /.well-known/agent-card.json](https://eudr.dev/.well-known/agent-card.json): A2A v1.0 agent card (skills, JSON-RPC endpoint, ed25519 pubkey). - [GET /.well-known/ai-plugin.json](https://eudr.dev/.well-known/ai-plugin.json): Legacy OpenAI plugin manifest. Points at the OpenAPI spec. - [GET /.well-known/mcp.json](https://eudr.dev/.well-known/mcp.json): MCP host-config snippet for Claude Desktop / Cursor / Continue / Cody / Zed. - [GET /openapi.json](https://eudr.dev/openapi.json): OpenAPI 3.1 spec covering /v1/* and /api/*. ## Verification - [GET /verify](https://eudr.dev/verify): Human-readable form for verifying an eudr.dev DDS receipt. - [GET /support](https://eudr.dev/support): Support form. Questions, bug reports, integration help, data-protection requests and security disclosures. Recorded on receipt, so an unanswered enquiry is visible as unanswered rather than lost in a mailbox. - [GET /.well-known/security.txt](https://eudr.dev/.well-known/security.txt): RFC 9116 security contact. ## Legal - [GET /legal/imprint](https://eudr.dev/legal/imprint): Operator (VORTX AI PRIVATE LIMITED, CIN U72200JH2024PTC023101). - [GET /privacy](https://eudr.dev/privacy): GDPR privacy notice. - [GET /legal/disclaimer](https://eudr.dev/legal/disclaimer): Independence + scope-of-service disclaimer. ## Optional - [GitHub](https://github.com/Vortx-AI/emem): source, CHANGELOG, runbooks. - Contact: avijeet@vortx.ai