Skip to content
Back to eudr.dev

Card snapshot

eudr.dev · 2026-09-22 08:00:35 UTC · 9f0bdbd5375c8a8b1236029bab2da1a5c6843e9c0d0cfd7a8c7e727b914ca1d9

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "protocolVersion": "0.3.0",
  "schema_version": "a2a/1.0",
  "version": "0.3.0",
  "name": "eudr.dev",
  "description": "Compiles EU Deforestation Regulation Annex II Due Diligence Statements from operator + supplier + plot geolocation. Built on emem.dev (content-addressed, ed25519-signed Earth observation). Receipts verifiable offline. Ingests scenarios from CSV and GS1 EPCIS 2.0; exports receipts to the official TRACES NT v2 XML / SOAP shape.",
  "url": "https://eudr.dev",
  "provider": {
    "organization": "Vortx \u00b7 emem.dev",
    "url": "https://emem.dev"
  },
  "identity": {
    "did": "did:web:eudr.dev",
    "pubkey_b32": "rc6pbb6bxrfhpt4jr6yhmklkjubresa4kc4uofdxp33qncmpi2vq",
    "pubkey_b64": "iLzwh8G8SnfPiY+wdilqTQMSSBxQuUcUd373BomPRqs="
  },
  "capabilities": {
    "streaming": true,
    "push_notifications": false,
    "state_transition_history": true,
    "task_states": [
      "submitted",
      "working",
      "input_required",
      "auth_required",
      "completed",
      "failed",
      "canceled",
      "rejected"
    ],
    "transports": [
      "http+jsonrpc",
      "http+sse"
    ],
    "jsonrpc_methods": [
      "SendMessage",
      "SendStreamingMessage",
      "GetTask",
      "ListTasks",
      "CancelTask",
      "SubscribeToTask",
      "GetExtendedAgentCard"
    ]
  },
  "preferredTransport": "JSONRPC",
  "additionalInterfaces": [
    {
      "url": "https://eudr.dev/a2a/rpc",
      "transport": "JSONRPC"
    }
  ],
  "interfaces": [
    {
      "protocol": "mcp",
      "transport": "streamable-http",
      "url": "https://eudr.dev/mcp",
      "versions": [
        "2026-07-28",
        "2025-11-25",
        "2025-06-18",
        "2025-03-26",
        "2024-11-05"
      ],
      "auth": "none",
      "note": "Dual-era Model Context Protocol. Answers both the `initialize` handshake and the stateless per-request form with `server/discover`. POST only."
    },
    {
      "protocol": "a2a",
      "transport": "http+jsonrpc",
      "url": "https://eudr.dev/a2a/rpc",
      "versions": [
        "a2a/1.0"
      ],
      "auth": "anonymous",
      "note": "Agent-to-Agent task envelope. NOT an MCP endpoint: an MCP client pointed here gets `method not found`."
    }
  ],
  "securitySchemes": {
    "apiKey": {
      "type": "http",
      "description": "A bearer API key from the operator's dashboard. The honest instrument for a headless agent, which has no user-agent to redirect and for which a browser flow is not merely awkward but structurally uncompletable.",
      "scheme": "bearer"
    },
    "oauth2": {
      "type": "oauth2",
      "description": "OAuth 2.1 with PKCE against this service's own authorization server. No third-party identity provider is involved. `eudr:read` covers checks and reading your own records; `eudr:write` is needed to compile and sign a statement.",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://eudr.dev/oauth/authorize",
          "tokenUrl": "https://eudr.dev/oauth/token",
          "scopes": {
            "eudr:read": "Check plots, read reference data, verify receipts, read your own statements",
            "eudr:write": "Compile and sign an Annex II Due Diligence Statement"
          }
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "eudr:read"
      ]
    },
    {
      "apiKey": []
    }
  ],
  "documentationUrl": "https://eudr.dev/docs",
  "iconUrl": "https://eudr.dev/console/assets/icon-192.png",
  "supportsAuthenticatedExtendedCard": false,
  "authentication": [
    "anonymous",
    "bearer"
  ],
  "payment_methods": [],
  "pricing": {
    "mode": "paid",
    "note": "Prepaid credits, one credit to one euro. Only eudr.compliance.dds.compile is charged, at 5 credits; every other skill is free and stays free. An organisation is granted 100 credits on sign-up, which covers 20 statements, and buys more at eudr.dev. A compile that fails is refunded automatically. Callers with no account may compile the demo scenarios published on the homepage, free and without credentials; any other plot needs an account."
  },
  "skills": [
    {
      "id": "dds-compile",
      "name": "Compile a Due Diligence Statement",
      "description": "Compile an Annex II Due Diligence Statement from a scenario (operator + supplier + product + plot geolocation). Runs the 7-stage pipeline: geo \u2192 forest \u2192 legality \u2192 tenure \u2192 risk \u2192 dds \u2192 settle. Forest stage is polygon-fully-sampled (max 51 200 cells per plot at ~91 m\u00b2 per cell; smallholder plots get ~110 cells, 30-ha plots ~3 000) so the verdict is per-cell-counted, not area-projected. Returns a signed Annex-II-shaped document plus the chain of ed25519-signed source CIDs from emem.dev, four content-addressed manifest CIDs (algorithms_cid, bands_cid, schema_cid, registry_cid) for offline replay, and the upstream-signed statement_of_compliance attributing the operator block (Annex II \u00a71). The printable report additionally surfaces nine emem-algorithm-backed forensics panels: foundation-encoder change consensus since 2020, cross-modal S1\u2a02S2 consistency, wildfire & burn history, wetland binary (Art. 2(13)), EO harvest-date detection, land-degradation trend, canopy chlorophyll (NDRE), soil moisture (SAR), soil organic carbon (S2+DEM).",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "application/dds+json"
      ],
      "examples": [
        "Compile the Annex II statement for this cocoa consignment from Soubr\u00e9.",
        "I have the plot boundaries and the supplier details \u2014 produce the filing document.",
        "Build a signed due diligence statement I can hand to my importer."
      ],
      "taskType": "eudr.compliance.dds.compile",
      "priceEur": 5.0,
      "priceAtomicX402": 5000000,
      "partialRefundOnBlock": true,
      "tags": [
        "eudr",
        "compliance",
        "annex_ii"
      ]
    },
    {
      "id": "plot-check",
      "name": "Check a plot for deforestation since the cut-off",
      "description": "Per-plot deforestation verdict via emem.dev /v1/eudr_dds \u2014 Hansen GFC + ESA WorldCover, optionally cross-checked against the JRC GFC2020 v3 baseline. Returns a per-cell verdict matrix with fact CIDs. Subset of `dds.compile` \u2014 runs only the forest stage.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Was there forest loss on this polygon after 31 December 2020?",
        "Check these four coffee plots in Ethiopia against the EUDR cut-off.",
        "Is this land deforestation-free under Article 3(a)?"
      ],
      "taskType": "eudr.deforestation.plot_check",
      "priceEur": 0.0,
      "priceAtomicX402": 0,
      "partialRefundOnBlock": false,
      "tags": [
        "eudr",
        "deforestation"
      ]
    },
    {
      "id": "legality",
      "name": "Look up a country's EUDR risk tier",
      "description": "Country-tier + supplier-identifier verification against Commission Implementing Regulation (EU) 2025/1093. Decides whether Article 13 simplified due diligence applies. The baseline module does not verify tenure, permits, or FPIC \u2014 plug a partner provider via the `LegalityProvider` trait for those.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "What risk tier is C\u00f4te d'Ivoire under the country benchmarking?",
        "Does simplified due diligence apply to timber from Romania?",
        "Which countries on my supplier list are classed high risk?"
      ],
      "taskType": "eudr.legality.country_check",
      "priceEur": 0.0,
      "priceAtomicX402": 0,
      "partialRefundOnBlock": false,
      "tags": [
        "eudr",
        "legality"
      ]
    },
    {
      "id": "verify-receipt",
      "name": "Verify a signed statement offline",
      "description": "Re-derive the CID and verify the ed25519 signature on a receipt issued by this agent. Runs offline; the only network call needed is a one-time fetch of the agent's pubkey.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Check that this receipt CID really was signed by eudr.dev.",
        "A supplier sent me a due diligence statement \u2014 is the signature genuine?",
        "Verify this statement without trusting the party who gave it to me."
      ],
      "taskType": "eudr.receipt.verify",
      "priceEur": 0.0,
      "priceAtomicX402": 0,
      "partialRefundOnBlock": false,
      "tags": [
        "eudr",
        "audit"
      ]
    },
    {
      "id": "traces-export",
      "name": "Export a statement as TRACES NT submission XML",
      "description": "Convert a signed DDS receipt into the official TRACES NT v2 XML shape (namespace http://ec.europa.eu/tracesnt/certificate/eudr/submission/v2) or into a complete SOAP+WS-Security envelope ready to POST to the EU Information System. Accepts an activity type (IMPORT, EXPORT, DOMESTIC, TRADE). The CLI command `eudr export-traces` is the offline path.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/xml"
      ],
      "examples": [
        "Give me the TRACES NT XML for this statement.",
        "Export the filing document in the official EU Information System format."
      ],
      "taskType": "eudr.traces.export",
      "priceEur": 0.0,
      "priceAtomicX402": 0,
      "partialRefundOnBlock": false,
      "tags": [
        "eudr",
        "submission",
        "traces"
      ]
    },
    {
      "id": "monitor-subscribe",
      "name": "Watch a plot for new forest loss",
      "description": "Subscribe to continuous monitoring on a filed plot. The agent re-runs the deforestation check on a cadence (default monthly) and emits a SignedReceipt-shaped event when a new Hansen loss year appears on any sampled cell post-cut-off. Re-attestation under Art. 8(2). Pricing is per re-check; the first check after Hansen's annual update is free.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Tell me if anything changes on this plot after I have filed.",
        "Keep watching these plots and alert me on new loss."
      ],
      "taskType": "eudr.monitor.subscribe",
      "priceEur": 0.0,
      "priceAtomicX402": 0,
      "partialRefundOnBlock": false,
      "tags": [
        "eudr",
        "monitoring",
        "art-8-2"
      ]
    }
  ],
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "application/dds+json",
    "text/event-stream"
  ],
  "regulation_anchors": [
    "Regulation (EU) 2023/1115",
    "Regulation (EU) 2025/2650 (Dec 2025 amendment \u2014 12-month delay + simplifications)",
    "Commission Implementing Regulation (EU) 2025/1093 (country benchmarks)",
    "EUDR Information System (TRACES NT)",
    "Regulation (EU) 2024/1689 (AI Act) Art. 50 transparency"
  ],
  "ai_system_disclosure": {
    "is_ai_system": true,
    "notice": "You are interacting with an AI system. eudr.dev is an autonomous AI agent that compiles due-diligence evidence into signed, offline-verifiable receipts. Its outputs are evidence summaries, not legal advice; the human operator remains responsible for the due-diligence statement they file.",
    "regulation": "Regulation (EU) 2024/1689 (AI Act), Article 50(1)",
    "provider_role": "Downstream deployer of AI-assisted Earth-observation pipelines; not a general-purpose AI model provider; not an Annex III high-risk use.",
    "human_oversight": "Verdicts are reproducible from the signed per-cell evidence chain; a non-negligible or indeterminate result is never auto-filed, and TRACES submission is the operator's act under their own EU Login identity."
  }
}