{"tools":[{"name":"getBlock","description":"Retrieve a finalized block from the Oakspoke chain. Returns the latest block when blockNumber is omitted.","inputSchema":{"type":"object","properties":{"blockNumber":{"type":"integer","minimum":0,"description":"Block number to retrieve. Omit to fetch the latest block."},"lite":{"type":"boolean","description":"When true, return the lightweight block (no seedBalances). Default false."}}}},{"name":"getBalance","description":"Get the Oakspoke balance for a GeoKey location.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"GeoKey location, e.g. \"X:75.332aef674c6_Y:159.44684f14f94\"."},"confirmed":{"type":"boolean","description":"When true, return the confirmed (proven) balance only — excludes pending block transactions. Default false."}},"required":["location"]}},{"name":"getProof","description":"Generate a Merkle proof for the balance at the given location.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"GeoKey location to prove."}},"required":["location"]}},{"name":"getStateRoot","description":"Get the current canonical stateRoot from balances.json.","inputSchema":{"type":"object","properties":{}}},{"name":"getParams","description":"Read network governance and core parameters (oakName, transactionFee, rewardInterval, etc.).","inputSchema":{"type":"object","properties":{}}},{"name":"submitTransaction","description":"Submit a signed transaction bundle to the chain.","inputSchema":{"type":"object","properties":{"transaction":{"type":"object","description":"Signed Oakspoke transaction object. Must include sender, recipient, amount, and a valid signature."}},"required":["transaction"]}},{"name":"health","description":"CA health check — returns version, status, and timestamp.","inputSchema":{"type":"object","properties":{}}},{"name":"claimLocation","description":"Generate a fresh, unclaimed Oakspoke GeoKey for a new user. Random hashA/hashB identity bits and random sub-cell offsets are produced with a CSPRNG; cell coordinates are uniformly random within the map dimensions reported by /params unless x and y are supplied.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"description":"Optional cell X coordinate (0 .. mapWidth-1). Random when omitted."},"y":{"type":"integer","minimum":0,"description":"Optional cell Y coordinate (0 .. mapHeight-1). Random when omitted."}}}},{"name":"pay","description":"Open the Oakspoke send-payment UI as an inline app. Renders an iframe pointing at https://oakspoke.com/#send so the user can compose and submit a transaction without leaving the conversation.","inputSchema":{"type":"object","properties":{}},"_meta":{"openai/outputTemplate":"ui://oakspoke/pay","ui":{"resourceUri":"ui://oakspoke/pay"}}},{"name":"chargeCard","description":"DIRECT card charge — debit an osdebitcard and submit a signed acoorn transaction to an arbitrary destination. Use this ONLY for ad-hoc payments (e.g., paying a merchant directly). DO NOT call this after buyItem — buyItem already performs the full charge and on-chain settlement internally. Proxies to the chargeDebitCard endpoint at /chargeCard. Default memo is \"🤖➡️\".","inputSchema":{"type":"object","properties":{"cardID":{"type":"string","description":"Card identifier (partition key on the osdebitcard table)."},"amount":{"type":"number","exclusiveMinimum":0,"description":"Amount to debit from the card (positive number)."},"destination":{"type":"string","description":"Recipient acoorn location (X:_Y:_), optionally AAA: prefixed."},"memo":{"type":"string","description":"Optional emoji memo. Defaults to \"🤖➡️\"."}},"required":["cardID","amount","destination"]}},{"name":"buyItem","description":"Purchase an item from the Oakspoke General Store using an osdebitcard. This is a SINGLE TERMINAL CALL that performs the entire purchase end-to-end: it atomically claims the deliverable, debits the card, signs and submits the on-chain transaction, and returns the delivered link/code. On a 200 response the purchase is COMPLETE — do NOT call chargeCard or submitTransaction afterward. If the charge fails the claim is rolled back so nothing is lost. Use browseStore first to find sku values.","inputSchema":{"type":"object","properties":{"cardID":{"type":"string","description":"15-digit Oakspoke debit card number (prefix \"99\", Luhn-valid)."},"sku":{"type":"string","description":"Item identifier from the browseStore catalog."}},"required":["cardID","sku"]}},{"name":"browseStore","description":"Browse items available for purchase in the Oakspoke General Store. Returns the public catalog (sku, title, description, price in ACN, type, stock). Does not expose codes or links — those are only delivered by buyItem after a successful charge.","inputSchema":{"type":"object","properties":{}}},{"name":"fetch","description":"Fetch a resource by id. Supports \"block:<n>\", \"balance:<location>\", \"proof:<location>\", or a bare numeric block id.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Resource identifier."}},"required":["id"]}},{"name":"search","description":"Heuristic search over Oakspoke resources. Numeric queries map to blocks; \"X:..._Y:...\" queries map to balances; otherwise returns the latest block.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query string."}},"required":["query"]}}]}