{"serverId":"mcp-registry/io.github.chriscorp/tracea","tools":[{"name":"check_payment_allowed","fixed":{"name":"check_payment_allowed","description":"Dry-run a payment BEFORE executing it: checks on-chain whether the agent's smart account would allow it (permission granted, within financial cap, destination approved if a whitelist exists). Returns { allowed, reason }.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address","destination","amount_eth"],"properties":{"amount_eth":{"type":"string","description":"Amount in ETH, e.g. '0.001'"},"destination":{"type":"string","description":"Destination address to pay"},"agent_address":{"type":"string","description":"Ethereum address of the agent (its smart account address)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"get_action","fixed":{"name":"get_action","description":"Read a single logged agent action from the Tracea ActionLog contract by its numeric ID. Returns agent, action type, payload and timestamp.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["action_id"],"properties":{"action_id":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Numeric action ID"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":113,"tokensAfter":113},{"name":"get_agent_actions","fixed":{"name":"get_agent_actions","description":"List all on-chain action IDs logged for a given agent on Tracea.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"agent_address":{"type":"string","description":"Ethereum address of the agent"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":89,"tokensAfter":89},{"name":"get_agent_info","fixed":{"name":"get_agent_info","description":"Get the raw Tracea registry record for an agent: owner, permission scope, financial cap, active status, timestamps.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"agent_address":{"type":"string","description":"Ethereum address of the agent"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"get_my_identity","fixed":{"name":"get_my_identity","description":"Get this agent's full Tracea identity (activity apiKey +, for v2 agents, its EOA private key and ERC-4337 smart account address) using a one-time activation code from the owner. The private key is returned ONLY ONCE — save it securely.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"agent_address":{"type":"string","description":"Ethereum address of this agent"},"activation_code":{"type":"string","description":"One-time activation code (or use ?code= / x-activation-code)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"get_owner_agents","fixed":{"name":"get_owner_agents","description":"List all agent addresses registered on Tracea by a given owner address.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["owner_address"],"properties":{"owner_address":{"type":"string","description":"Ethereum address of the owner"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":90,"tokensAfter":90},{"name":"get_payment_whitelist","fixed":{"name":"get_payment_whitelist","description":"Get the list of owner-approved payment destination addresses for an agent (anti-injection guardrail). Non-empty list = the agent's smart account can ONLY pay these addresses. Empty = all allowed.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"agent_address":{"type":"string","description":"Ethereum address of the agent"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"get_registration_file","fixed":{"name":"get_registration_file","description":"Fetch the ERC-8004 compatible registration file for a Tracea-registered agent, including the KYA legal principal block.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"agent_address":{"type":"string","description":"Ethereum address of the agent"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"get_verification_card","fixed":{"name":"get_verification_card","description":"Get the public URL of an agent's Tracea KYA verification card — the shareable page that presents the mandant entity, the permission scope, the financial cap and a proof hash, with a bilingual FR/EN transparency statement. Use it to hand a verifier a link. Returns the ready-to-share link plus the machine-readable JSON endpoints. Defaults to the 'standard' disclosure level, which is what the API exposes publicly.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"lang":{"enum":["fr","en"],"type":"string","description":"Card language; the card also auto-detects the visitor's browser language"},"niveau":{"enum":["minimum","standard","complet"],"type":"string","description":"Disclosure level: minimum | standard (default) | complet"},"agent_address":{"type":"string","description":"Ethereum address of the agent (0x...)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":265,"tokensAfter":265},{"name":"is_agent_revoked","fixed":{"name":"is_agent_revoked","description":"Check whether an agent's mandate has been revoked on Tracea (immediate, scheduled or partial revocation).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_address"],"properties":{"agent_address":{"type":"string","description":"Ethereum address of the agent"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"payment_incoming","fixed":{"name":"payment_incoming","description":"Verify a x402 payment ON-CHAIN (the USDC transfer to your address, exact amount) and mark the session fulfilled. The blockchain is the ONLY source of truth — the payment_sessions table is never trusted alone. Returns { status: 'fulfilled', resource } if verified, or an error if not yet paid/expired.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["payment_id","tx_hash"],"properties":{"tx_hash":{"type":"string","description":"The on-chain transaction hash of the USDC transfer / payX402 call"},"payment_id":{"type":"string","description":"The paymentId returned by payment_required (pay_...)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":192,"tokensAfter":192},{"name":"payment_required","fixed":{"name":"payment_required","description":"Create a x402 payment request (HTTP 402) for a resource you sell to another agent. Returns a paymentId, the USDC amount in units, the destination address and the TraceaPayments contract to call. The paying agent must then call TraceaPayments.payX402(destination, amount, paymentId) on-chain — the contract enforces financial cap + whitelist on-chain. Deliver the resource only after payment_incoming confirms fulfilment.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["destination","amount_usdc"],"properties":{"agent":{"type":"string","description":"Address of the paying agent, if known"},"resource":{"type":"string","description":"Identifier/URL of the resource to unlock after payment"},"amount_usdc":{"type":"string","description":"Amount in USDC, e.g. '0.50' or '2'"},"destination":{"type":"string","description":"Address that receives the USDC payment (yours)"},"ttl_seconds":{"type":"number","description":"Validity of the payment session (30-3600s, default 300)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":297,"tokensAfter":297},{"name":"payment_status","fixed":{"name":"payment_status","description":"Get the status of a x402 payment session (pending | paid | fulfilled | expired), with destination, amount and tx hash. Useful to poll while waiting for the paying agent's on-chain transaction.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["payment_id"],"properties":{"payment_id":{"type":"string","description":"The paymentId returned by payment_required (pay_...)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"tracea_check_demarche","fixed":{"name":"tracea_check_demarche","description":"THE anti-rejection check. Submit the data you collected; it validates every field against the official procedure schema AND cross-checks critical values against official French registries (e.g. SIRET against INSEE Sirene). Returns { ok: true, recordHash } or { ok: false, errors: [{ field, message }] }. ALWAYS call this BEFORE telling the user the file is ready, and fix the exact fields reported.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","donnees"],"properties":{"id":{"type":"integer","maximum":9007199254740991,"description":"Procedure id (e.g. 15776)","exclusiveMinimum":0},"donnees":{"type":"object","description":"Collected data as a flat object, field names exactly as in tracea_demarche_schema","propertyNames":{"type":"string"},"additionalProperties":{}}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":243,"tokensAfter":243},{"name":"tracea_list_demarches","fixed":{"name":"tracea_list_demarches","description":"List the administrative procedures Tracea supports. ALWAYS call this first: it returns the exact procedure IDs so the AI never has to guess which form (CERFA) applies. `schemaPret: true` means guided mode (anti-rejection check available) is ready for that procedure.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":101,"tokensAfter":101}],"toolsChanged":15,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}