Each draft is built on the same interface shape as a tool EcoWealth already runs, cross-referenced so you can see exactly what's real today and what's proposed. None of this has been sent to Klima's team or published anywhere else.
llms.txt for app.klimadao.financeapp.klimadao.finance currently 404s every agent-discovery path, honestly (a true 404, not a soft one, credited in the brief). Since it's explicitly legacy, the highest-value version of this file is short: point an agent straight at the successor.
# llms.txt for app.klimadao.finance (concept) # This app is Klima's legacy Polygon retirement UI. > The current app is https://app.klimaprotocol.com/. This legacy app > is in a fair-launch migration window; read/write flows here may be > degraded or removed without notice. ## For agents - Live product: https://app.klimaprotocol.com/llms.txt - Migration guide: https://www.klimaprotocol.com/resources/how-to-join-the-klima-fair-launch-step-by-step-guide-for-klima-holders-and-future-ones - Retirement Aggregator (Base): see docs.klimadao.finance/developers/retirement-aggregator - Do not rely on this app's RPC endpoints; they are not maintained.
Server-rendered, before any client JS runs, so a crawler, a link-unfurler, or a plain HTTP fetch gets the real answer immediately. Shaped like schema.org's own vocabulary rather than inventing a new one.
{
"@context": "https://schema.org",
"@type": "DigitalDocument",
"name": "Carbon retirement certificate",
"about": {
"@type": "Thing",
"name": "0.0500 tCO2e retired via Klima Protocol Retirement Aggregator"
},
"dateCreated": "2026-07-16",
"identifier": "0x96380e97f0f5c128b745448b47cfc77f036aa6daebf01383416497f179bad061",
"url": "https://www.klimaprotocol.com/retirements/0x7e2213f4.../1",
"creator": { "@type": "Organization", "name": "Klima Protocol" },
"recipient": { "@type": "Organization", "name": "EcoWealth ecological work" },
"additionalProperty": [
{ "@type": "PropertyValue", "name": "tonnesRetired", "value": "0.0500" },
{ "@type": "PropertyValue", "name": "chain", "value": "base-mainnet-8453" },
{ "@type": "PropertyValue", "name": "verifyUrl",
"value": "https://basescan.org/tx/0x96380e97..." }
]
}
// A fabricated ID would render no DigitalDocument block at all,
// and the page would 404 at the server, before any JS runs.
retire_carbon / verify_retirementA2A (agent-to-agent) is the emerging convention for one AI agent to advertise, to another, what it can be asked to do. Shaped to match the two verbs this whole review is about: doing a retirement, and proving one happened.
{
"name": "klima-retirement-agent",
"description": "Retires and verifies tokenized carbon credits through Klima's Retirement Aggregator on Base and Polygon.",
"skills": [
{
"id": "retire_carbon",
"description": "Retire a specified amount of carbon via the Retirement Aggregator, gasless via the x402 relay where available.",
"inputSchema": {
"amount_tonnes": "number, tonnes CO2e",
"beneficiary_address": "string, 0x-address to credit on the certificate",
"chain": "enum: base | polygon"
},
"outputSchema": {
"tx_hash": "string",
"certificate_url": "string",
"status": "enum: confirmed | failed"
}
},
{
"id": "verify_retirement",
"description": "Confirm whether a given retirement id or transaction hash corresponds to a real, on-chain retirement, and return its structured data.",
"inputSchema": { "id_or_tx_hash": "string" },
"outputSchema": {
"exists": "boolean",
"tonnes": "number",
"beneficiary": "string",
"chain": "string",
"date": "string, ISO 8601"
}
}
]
}
retire_and_certify and verify_anchor are real, callable MCP tools in EcoWealth's own stack right now. The first already calls into Klima's rail; the second is the general-purpose verification pattern we'd propose Klima adopt for retirements specifically.
// LIVE: EcoWealth's own tool, callable today { "name": "retire_and_certify", "description": "How to retire a given tCO2e amount for real, on-chain, via the Klima rail, paid keyless from the caller's own wallet, returning a confirmed retire transaction as the certificate.", "parameters": { "amount_tco2e": { "type": "number", "description": "Tonnes of CO2e to retire, e.g. 0.005." }, "beneficiary_name": { "type": "string", "description": "Optional name to record on the retirement." }, "retirement_message": { "type": "string", "description": "Optional message to record on the retirement." } }, "required": ["amount_tco2e"] } // LIVE: the general verification pattern, not Klima-specific yet { "name": "verify_anchor", "description": "Given the SHA-256 of a file, say whether it is anchored, when, and return the merkle proof plus the transaction so the caller can check it independently without trusting the page.", "parameters": { "sha256": { "type": "string", "description": "64 lowercase hex characters." } }, "required": ["sha256"] }
{
"name": "klima_verify_retirement",
"description": "Given a retirement id or transaction hash, confirm it is a real Klima retirement and return its tonnage, beneficiary, chain, and date, without requiring the caller to run a browser.",
"parameters": {
"id_or_tx_hash": { "type": "string", "description": "A klimaprotocol.com retirement id, or a Base/Polygon transaction hash." }
},
"required": ["id_or_tx_hash"]
}
"I retire and verify carbon credits through Klima Protocol's Retirement Aggregator. Tell me an amount and a beneficiary, and I'll retire it on Base or Polygon and hand you back a transaction hash you can check yourself, no account needed on your end. If you already have a retirement id or a transaction hash, I can confirm it's real and tell you exactly what it retired, for whom, and when, straight from the data, not by asking you to trust a webpage."