Four small pieces, every one of them entirely EcoWealth's own to build, none require Sylvera's cooperation, an account, or a contact. They exist to turn "a settled EWP receipt could probably fit CDOP" into something an agent (or a CDOP maintainer reviewing a PR) can check in one command.
Unit_Description.schema.json (see the capability brief and demo for the schema fetch + real validator run this kit is built on).
The core artifact. A short, reviewable table any CDOP maintainer could read in one sitting, exactly the shape a fortnightly-maintainer-session PR review wants.
| EWP field (real) | CDOP field (id · path) | Note |
|---|---|---|
| Settled work packet's credit class reference | 138 · project.current_registry_project_id | Already a registry-style identifier in our data |
| Footprint unit ("tCO2e") | 139 · unit.metric | Direct match, no transform needed |
| Signer wallet (0x034F…) | 140 · unit.owner_account_id | Direct match |
| Retire beneficiary (0x9166…, ≠ signer) | 141 · unit.retirement_beneficiary | The field-for-field match this whole brief is about |
| Settlement/retirement tx narrative | 142 · unit.retirement_detail | Free text: workId + tx hash + proof summary |
| Retirement tx hash (serial-equivalent) | 143 · unit.serial_number | Concatenated contract + workId, deterministic |
| Retirement status ("retired") | 145 · unit.status | Direct match |
| Credit type ("removal"/"reduction") | 147 · unit.type | Sourced from the underlying Klima/Regen credit class |
| Quantity (tCO2e retired) | 148 · unit.quantity | Direct match, integer |
| Credit vintage year | 151 · vintage.vintage | Must be full ISO date, the one real gotcha we hit |
→ scroll right to see the CDOP field + note columns
Not a concept: this already happened. The full JSON record and both validator runs (the failing first attempt, the passing second) are in evidence.json verbatim, reproducible with curl + pip install check-jsonschema. This is the proof underneath row 4 of the table above.
A quiet, documentation-grade x402 endpoint (same tier as the existing /work-tco2e and /proof-check family) that takes a settled, retired EWP workId and returns it pre-shaped as a CDOP Unit_Description record, so any agent that already speaks CDOP (a Sylvera integration, a CDR.fyi tool, any of the 52 CDOP-participating orgs) can pull an EcoWealth receipt without knowing anything about EWP's own event shapes first.
GET https://vealth.net/.well-known/vealth/work-cdop-export/14
200 OK
{
"project": { "current_registry_project_id": "REGEN-NETWORK:CITY-FOREST-CREDITS:0x0008f3" },
"unit": {
"metric": "tCO2e", "owner_account_id": "0x034F…c89",
"retirement_beneficiary": "EcoWealth EWP: settled workId 14",
"retirement_detail": "Retired via Klima Retirement Aggregator on Base; EWP contract 0x76c17C…A14B; proof: photo+GPS+signature -> approve -> settle -> retire",
"serial_number": "EWP-BASE-0x76c17C-WORK-14-RETIRE",
"status": "Retired", "type": "Removal", "quantity": 1,
"block_start": 1, "block_end": 1
},
"vintage": { "vintage": "2024-01-01" }
}
One tool, matched to the export endpoint above, usable by any MCP host, not just a hand-rolled integration.
{
"tools": [
{ "name": "ewp_export_as_cdop_unit",
"description": "Fetch a settled, retired EWP work packet and return it as a CDOP Unit_Description-shaped record (project/unit/vintage), including the retirement_beneficiary field.",
"inputSchema": { "type": "object", "required": ["workId"],
"properties": { "workId": { "type": "integer" } } } }
]
}
Role. Explains, in plain language, that an EWP receipt already carries everything CDOP's Unit_Description schema asks for, and hands back the mapped JSON on request.
Guardrails. Never claims Sylvera or CDOP has adopted or endorsed this mapping. Always states plainly that this is EcoWealth's own concept transform of its own data, not a CDOP-published artifact.
Sample turn. "workId 14 settled and retired on Base, here it is as a CDOP Unit_Description record, including a retirement_beneficiary distinct from the signer. This shape isn't published by CDOP or Sylvera; it's our own mapping of our own receipt."