Four small files. None of them change how a retirement executes, they only make the existing, working x402.klimalabs.com/api endpoint (finding 4) and the marketing domains (finding 2) discoverable the way a generic agent, not just one that read your GitHub repo, would look for them.
discover/quote/prepare/retire/certificate, GitHub skill klima-retire.md v0.2.0), not invented capabilities.The one file that would let a generic x402-aware client (Coinbase's own reference client, EcoWealth's, or anyone else's) find the retire endpoint without reading Klima's blog first. Fee mechanics stay exactly as they are today, the manifest documents the free reads and the one action that moves value.
{
"x402Version": 1,
"provider": "Klima Protocol",
"description": "Discover carbon liquidity, quote live prices, and retire tokenized credits on Base, gasless relay available.",
"resources": [
{ "resource": "/api/discover", "method": "GET", "accepts": [], "description": "List carbon classes + live USDC/tonne reference prices." },
{ "resource": "/api/quote", "method": "GET", "accepts": [], "description": "Price a specific retirement amount." },
{ "resource": "/api/prepare-auth", "method": "GET", "accepts": [], "description": "Build the EIP-712 typed data for a gasless relay authorization." },
{ "resource": "/api/actions/retire", "method": "POST",
"accepts": [
{ "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xda0a793d7c32ab80bcdab7f8c725c96db22464f4",
"description": "Signed EIP-712 authorization submitted; executor broadcasts and reimburses gas from the signed budget." }
] },
{ "resource": "/api/certificate", "method": "GET", "accepts": [], "description": "Resolve the public Carbonmark certificate URL for a completed retirement." }
]
}
Standard Agent2Agent card, protocolVersion 0.3, the same shape docs.base.org and docs.cdp.coinbase.com already ship, describing the retirement flow as a callable skill.
{
"protocolVersion": "0.3",
"name": "Klima Carbon Retirement",
"description": "Retire tokenized voluntary carbon credits on Base, with a public Carbonmark certificate.",
"url": "https://x402.klimalabs.com/api",
"provider": { "organization": "Klima Protocol" },
"capabilities": { "streaming": false, "pushNotifications": false },
"skills": [
{
"id": "retire-carbon",
"name": "Retire Carbon Credit",
"description": "Discover live carbon classes, quote a retirement amount, and execute it gaslessly on Base via a signed EIP-712 authorization. Returns a public Carbonmark certificate.",
"tags": ["carbon", "climate", "retirement", "base", "gasless"],
"examples": ["Retire 0.001 tonnes of Regen Network forest credits and give me the certificate."]
}
]
}
Same four-step flow, expressed as MCP tool definitions instead of a chat-only GET-paste skill, usable by any MCP host, not only the Base-MCP + Claude Code combination the current GitHub plugin targets.
{
"tools": [
{ "name": "klima_discover_carbon_classes",
"description": "List live carbon classes and USDC/tonne prices, optionally filtered.",
"inputSchema": { "type": "object", "properties": {
"maxUsdcPricePerTonne": { "type": "number" },
"carbonClass": { "type": "string" } } } },
{ "name": "klima_quote_retirement",
"description": "Price a specific retirement amount in USDC.",
"inputSchema": { "type": "object", "required": ["carbonClass", "amountTonnes"],
"properties": { "carbonClass": { "type": "string" }, "amountTonnes": { "type": "number" } } } },
{ "name": "klima_prepare_relay_auth",
"description": "Build the EIP-712 typed-data payload for a gasless retirement, capped by the caller's max USD budget.",
"inputSchema": { "type": "object", "required": ["carbonClass", "amountTonnes", "fromAddress", "maxAuthUsd"],
"properties": { "carbonClass": { "type": "string" }, "amountTonnes": { "type": "number" },
"fromAddress": { "type": "string" }, "maxAuthUsd": { "type": "number" } } } },
{ "name": "klima_submit_signed_retirement",
"description": "Submit a signed EIP-712 authorization; executor broadcasts on Base and returns the tx hash + certificate URL.",
"inputSchema": { "type": "object", "required": ["signedAuthPayload"],
"properties": { "signedAuthPayload": { "type": "object" } } } },
{ "name": "klima_get_certificate",
"description": "Resolve the public Carbonmark certificate for a completed retirement transaction.",
"inputSchema": { "type": "object", "required": ["txHash"], "properties": { "txHash": { "type": "string" } } } }
]
}
Role. Explains what a carbon credit retirement means in plain language, checks the caller has funds on Base (USDC or kVCM + a little ETH, or nothing at all on the gasless relay path), and walks discover → quote → prepare → sign → certificate, pausing for explicit confirmation before the one step that moves value.
Guardrails. Never fabricates a wallet address, always reads it from the connected signer. States the exact USDC cost before asking for a signature. Never signs above the caller's stated budget. Always surfaces the Carbonmark certificate URL as proof, not just a transaction hash.
Sample turn. "I found City Forest Credits at $6.40/tonne on Base, retiring 0.001 tonnes costs about $0.006 plus a small protocol fee, no gas needed on the relay path. Want me to prepare it? I'll show you the exact number before anything is signed."