{"serverId":"mcp-registry/io.github.philpof102-svg/biii","tools":[{"name":"till_authorize","fixed":{"name":"till_authorize","description":"SPEND AUTHORIZATION (Skyfire Programmable Payment): create a charge AND check it against what the agent's OWNER signed off — token, recipient allow-list, per-charge max, AND the cumulative cap. Fail-closed and drain-safe: an EIP-681 payment intent is issued ONLY if the charge is authorized (ten small charges cannot beat a low cap). BIII does not verify the authorization JWT signature itself — pass verified:true after checking it, or supply a spendAuth object. The caller tracks spentMicro (BIII i","inputSchema":{"type":"object","required":["to","spendAuth"],"properties":{"to":{"type":"string","description":"merchant 0x address (their own wallet)"},"label":{"type":"string"},"verified":{"type":"boolean","description":"attest the authorization JWT signature verified (BIII does not check it itself)"},"amountUsd":{"type":"string","description":"e.g. \"12.50\" (or use amountMicro)"},"spendAuth":{"description":"the owner's signed spend authorization: a Programmable-Payment JWT (string) OR an object {token, chainId, maxPerChargeMicro, cumulativeCapMicro, allowedRecipients, exp}","type":"string"},"spentMicro":{"type":"string","description":"how much has ALREADY been spent under this authorization (the caller's running total — the cumulative guard)"},"amountMicro":{"type":"string"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: spendAuth. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":367,"tokensAfter":371},{"name":"till_check_invoice","fixed":{"name":"till_check_invoice","description":"Check an invoice against the chain: settled (paid on-chain, field-for-field) / overdue / issued / not_observable (settles on a rail BIII cannot read — ask the merchant's books, never assume unpaid). If settled, returns the receipt for the registry.","inputSchema":{"type":"object","required":["to","totalMicro"],"properties":{"to":{"type":"string"},"rail":{"type":"string","description":"optional — the SAME rail the invoice was created with. This tool rebuilds the invoice from these arguments, so a rail not passed here is a rail BIII cannot know about, and an off-chain invoice would be reported \"overdue, unpaid\" about a customer who has paid."},"number":{"type":"string"},"dueDateMs":{"type":"number"},"totalMicro":{"type":"string","description":"the invoice totalMicro"},"merchantName":{"type":"string"},"lookbackBlocks":{"type":"number","description":"default 43200 (~1 day on Base); invoices are slower than tills"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":270,"tokensAfter":270},{"name":"till_check_payment","fixed":{"name":"till_check_payment","description":"Watch Base for the USDC transfer paying a charge and verify it FIELD-FOR-FIELD (wrong chain/token/recipient/underpay/unconfirmed = NOT paid). Only the chain says paid — verification is chain-only and never depends on any trust signal. Pass withTrust:true to ALSO get the payee's advisory MainStreet trust in the same call (advisory, never changes the paid verdict).","inputSchema":{"type":"object","required":["to","amountMicro"],"properties":{"to":{"type":"string"},"withTrust":{"type":"boolean","description":"optional — also return advisoryTrust (MainStreet safe-to-pay on the payee); does NOT affect the chain-only paid verdict"},"amountMicro":{"type":"string"},"lookbackBlocks":{"type":"number","description":"default 900 (~30 min on Base)"}}},"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":221,"tokensAfter":221},{"name":"till_create_charge","fixed":{"name":"till_create_charge","description":"Create a USDC-on-Base charge for a real-world merchant. Returns the charge + the EIP-681 payment URI your OWN wallet must execute (basetill holds no key, moves no funds).","inputSchema":{"type":"object","required":["to","amountUsd"],"properties":{"to":{"type":"string","description":"merchant 0x address (their own wallet — non-custodial)"},"label":{"type":"string"},"orderId":{"type":"string"},"amountUsd":{"type":"string","description":"e.g. \"4.50\""}}},"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":140,"tokensAfter":140},{"name":"till_create_invoice","fixed":{"name":"till_create_invoice","description":"Create a Web2-style INVOICE (number, line items, due date, bill-to) on the SAME non-custodial registry: paid by the same EIP-681 intent, verified by the same chain discipline, recorded in the same provable till roll. Returns the invoice + a human-readable bill (EN/FR) + the payment URI.","inputSchema":{"type":"object","required":["to","lineItems"],"properties":{"to":{"type":"string","description":"merchant 0x address (their own wallet — non-custodial)"},"lang":{"type":"string","description":"\"en\" (default) or \"fr\""},"rail":{"type":"string","description":"optional — how this invoice SETTLES. Absent or \"base\" = USDC on Base, which BIII reads and can therefore attest. Name any other rail (\"card\", \"sepa\", \"cash\", \"mastercard-agent-pay\") and till_check_invoice returns not_observable instead of calling the customer unpaid: an invoice settled by card or in cash will never appear on Base, so the absence of an on-chain transfer says nothing about them. Pass the SAME rail to till_check_invoice."},"billTo":{"type":"string"},"number":{"type":"string"},"dueDateMs":{"type":"number"},"lineItems":{"type":"array","items":{"type":"object","properties":{"qty":{"type":"number"},"unitUsd":{"type":"string"},"amountUsd":{"type":"string"},"description":{"type":"string"}}},"description":"[{description, amountUsd} or {description, qty, unitUsd}]"},"merchantName":{"type":"string"}}},"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":400,"tokensAfter":400},{"name":"till_export","fixed":{"name":"till_export","description":"ACCOUNTING EXPORT: turn the verified receipts into an accountant-ready CSV that QuickBooks / Xero / Excel import (the export finance teams need to adopt). Every row carries its own txHash + Basescan link, so the accountant re-verifies each amount on Base themselves — the export is a POINTER to the chain, never a book to trust. Non-custodial (BIII moved no funds). Columns: date, receipt_no, reference, description, payer, gross_usdc, tip_usdc, charged_usdc, token, chain, tx_hash, basescan_url, sta","inputSchema":{"type":"object","required":["receipts"],"properties":{"brand":{"description":"WHITE-LABEL: a partner brand (string or {name}) — slugs the download filename; the non-custodial disclosure stays regardless.","type":"string"},"receipts":{"type":"array","items":{"type":"object"},"description":"the verified receipt objects (from till_receipt), each carrying a txHash"},"toBlockTime":{"type":"number","description":"optional — only export receipts settled at/before this unix block time"},"fromBlockTime":{"type":"number","description":"optional — only export receipts settled at/after this unix block time"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: brand. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":318,"tokensAfter":323},{"name":"till_resolve","fixed":{"name":"till_resolve","description":"IDENTITY BRIDGE: resolve an AGENT identity — a buzz/Nostr npub (64-hex secp256k1) AND/OR a gitlawb did:key (Ed25519) — to a payable, trust-assessable BASE address, trustlessly. The binding is a BIDIRECTIONAL attestation: each identity key AND the Base key sign the same canonical message, so anyone re-verifies the signatures (BIII never takes your word). A binding needs AT LEAST one identity key (npub or did). Fail-closed: unverified / an identity key missing its signature / expired / un-nonced /","inputSchema":{"type":"object","required":["address"],"properties":{"did":{"type":"string","description":"the agent's gitlawb did:key (Ed25519 identity) — provide did and/or npub"},"npub":{"type":"string","description":"the agent's 64-hex secp256k1 pubkey (Nostr/buzz identity) — provide npub and/or did"},"nonce":{"type":"string","description":"a per-binding nonce (anti-replay) — required"},"expiry":{"type":"number","description":"optional unix seconds; 0 = no expiry"},"sigDid":{"type":"string","description":"the did:key's Ed25519 signature over the canonical message (required if did is present)"},"address":{"type":"string","description":"the claimed Base address (0x…)"},"chainId":{"type":"number","description":"default 8453 (Base)"},"sigBase":{"type":"string","description":"the Base key's signature over the canonical message (always required)"},"sigNostr":{"type":"string","description":"the Nostr key's signature over the canonical message (required if npub is present)"},"verified":{"type":"boolean","description":"attest that every present signature verified (BIII does not check secp256k1/Ed25519 itself)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":463,"tokensAfter":463},{"name":"till_roll","fixed":{"name":"till_roll","description":"PROVABLE BOOKS: render an agent/merchant's till roll — a shareable statement where EVERY line carries its own txHash + basescan link, so the reader re-verifies each payment on Base themselves (trust no one, not even BIII). This is the substitute for the settlement statement an excluded merchant/agent loses when they leave a PSP. Pure and non-custodial (BIII holds no funds). Pass the verified receipts you collected from till_receipt.","inputSchema":{"type":"object","required":["receipts"],"properties":{"lang":{"type":"string","description":"\"en\" (default) or \"fr\""},"brand":{"description":"WHITE-LABEL: a partner brand for the footer (\"via <name>\", optionally \"· powered by BIII\"). String or {name, poweredBy}. The non-custodial disclosure is a fact and stays regardless.","type":"string"},"receipts":{"type":"array","items":{"type":"object"},"description":"the verified receipt objects (from till_receipt), each carrying a txHash"},"merchantName":{"type":"string"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: brand. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":278,"tokensAfter":283}],"toolsChanged":8,"tokensSaved":0,"todo":[{"tool":"till_authorize","params":["label","amountMicro"]},{"tool":"till_check_invoice","params":["to","number","dueDateMs","merchantName"]},{"tool":"till_check_payment","params":["to","amountMicro"]},{"tool":"till_create_charge","params":["label","orderId"]},{"tool":"till_create_invoice","params":["billTo","number","dueDateMs","merchantName"]},{"tool":"till_meter","params":["toBlockTime","fromBlockTime"]},{"tool":"till_receipt","params":["to","label","amountUsd","merchantName","lookbackBlocks"]},{"tool":"till_roll","params":["merchantName"]},{"tool":"till_vet_approach","params":["asksToInstall","asksForKeyOrSeed","asksForSignature","asksForUpfrontPayment"]}],"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."}