{"serverId":"mcp-registry/io.github.gblinproject/gblin-mcp-server","tools":[{"name":"actions.prepare","fixed":{"name":"actions_prepare","description":"Builds the unsigned transactions for an operation on the GBLIN vault, in the order they are sent. Actions: mint_with_eth (amount in ETH), mint_with_weth (amount in WETH), mint_with_usdc (amount in USDC, through the Zap), redeem_in_kind (amount in shares; pro rata basket tokens, no fee, no price feed), exit_to_eth (amount in shares, through the Zap, all or nothing), exit_to_usdc (amount = the USDC needed), bid (trade with the rebalancing auction; row optional, the largest gap by default). Every o","inputSchema":{"type":"object","required":["action","wallet_address"],"properties":{"row":{"type":"integer","minimum":0,"description":"bid only: the basket row to bid on. Default: the row with the largest gap."},"action":{"enum":["mint_with_eth","mint_with_weth","mint_with_usdc","redeem_in_kind","exit_to_eth","exit_to_usdc","bid"],"type":"string","description":"The operation to prepare."},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","description":"Decimal amount. Unit depends on the action (see the description). Not used by bid."},"wallet_address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The wallet that will sign and receive."}},"additionalProperties":false},"annotations":{"title":"Prepare an operation on the vault","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"actions.prepare\" → \"actions_prepare\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":346,"tokensAfter":346},{"name":"actions.preview","fixed":{"name":"actions_preview","description":"Simulates a list of transactions in sequence against the latest Base block, as if the wallet sent them one after the other, before anything is signed. Each step sees the state the previous ones left (an approval before a mint works). Accepts steps with target or to, calldata or data, and optional value and gas. Returns, per step, whether it would succeed, the gas it uses, whether the gas limit it carries is enough, and the decoded revert reason when it fails; and the net token and ETH movements ","inputSchema":{"type":"object","required":["from","steps"],"properties":{"from":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The wallet that will send the steps."},"steps":{"type":"array","items":{"type":"object","required":[],"properties":{"to":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"gas":{"type":"string","pattern":"^\\d+$"},"data":{"type":"string","pattern":"^0x([0-9a-fA-F]{2})*$"},"value":{"type":"string","pattern":"^\\d+$"},"target":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Contract to call. Alias: to."},"calldata":{"type":"string","pattern":"^0x([0-9a-fA-F]{2})*$","description":"ABI-encoded call. Alias: data."}},"additionalProperties":true},"maxItems":8,"minItems":1,"description":"The steps, in order: target and calldata (or their send_calls spellings, to and data), value in wei (optional), gas (optional)."}},"additionalProperties":false},"annotations":{"title":"Simulate steps before signing","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"actions.preview\" → \"actions_preview\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":404,"tokensAfter":404},{"name":"actions.status","fixed":{"name":"actions_status","description":"Reports what a sent Base transaction did: pending, succeeded, reverted or not found; its block and confirmations; the fee paid; the net token movements for the sender (GBLIN shares minted or redeemed, USDC, basket tokens); and, when it reverted, the decoded reason.","inputSchema":{"type":"object","required":["hash"],"properties":{"hash":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The transaction hash."}},"additionalProperties":false},"annotations":{"title":"Read a transaction's outcome","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"actions.status\" → \"actions_status\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"attestation.verify","fixed":{"name":"attestation_verify","description":"Verifies a GBLIN Risk Attestation, the object returned by GBLIN's /api/x402/attestation, or a proof-of-diligence attached by a peer agent. Free. Runs four checks: (1) integrity, by recomputing the EIP-712 attestation_id; (2) authenticity, by recovering the signer when a signature is present and comparing it with GBLIN's published attestor; (3) freshness, against on-chain time (10-minute validity); (4) live drift, by comparing the attested regime with the current on-chain regime.","inputSchema":{"type":"object","required":["attestation"],"properties":{"attestation":{"type":"object","description":"The full attestation object from /api/x402/attestation (must include `eip712`; `attestation_id`, `signature`, `attestor` are used when present). A JSON string of that object is also accepted."},"expected_attestor":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Optional 0x address to check the signature against. Defaults to the GBLIN attestor address baked into this MCP build (GBLIN_ATTESTOR_ADDRESS env)."}},"additionalProperties":false},"annotations":{"title":"Verify a risk attestation","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"attestation.verify\" → \"attestation_verify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":307,"tokensAfter":307},{"name":"auction.state","fixed":{"name":"auction_state","description":"Read the GBLIN rebalancing auction on Base. The vault does not rebalance itself and pays nobody to do it: when a basket row drifts past its band it holds a Dutch auction, and whoever trades with it toward the target weights is the counterparty, at the oracle price adjusted by a premium that starts at a discount and rises to a cap over one ramp. Returns, per row, the side the vault takes, the gap in ETH, the token and amount the bidder hands over, and unsigned calldata (approval + bid). The premi","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Read the rebalancing auction","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"auction.state\" → \"auction_state\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":176,"tokensAfter":176},{"name":"coherence.report","fixed":{"name":"coherence_report","description":"Kept/violated tallies for GBLIN's pre-registered, hash-pinned promises (attestation uptime, counter honesty), probed every 10 minutes; each closed UTC day is sealed on Base as an EAS attestation (schema 0x9f433a96…). Self-observation only in v0. Free.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Coherence report (promises vs conduct, free)","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"coherence.report\" → \"coherence_report\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":108,"tokensAfter":108},{"name":"governance.state","fixed":{"name":"governance_state","description":"Reads GBLIN protocol governance: whether the GBLIN vault is owned by the 48-hour timelock, the timelock's minimum delay and grace period, role member counts, and any pending asset-addition proposal on the vault. With an operation_id it also reports the status of that timelock operation. Read-only.","inputSchema":{"type":"object","required":[],"properties":{"operation_id":{"type":"string","description":"Optional 0x-prefixed 32-byte hex id of a specific timelock operation to inspect."}},"additionalProperties":false},"annotations":{"title":"Verify governance and the timelock","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"governance.state\" → \"governance_state\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"payments.prepare","fixed":{"name":"payments_prepare","description":"Builds a gasless GBLIN payment. The vault's share token implements EIP-3009, so the holder signs an authorization and anybody can carry it on chain: the payer needs no ETH. Returns the EIP-712 message to sign (its domain is read from the token, not assumed), the calldata that carries the signed authorization, and the x402 'exact' payload for paying an HTTP endpoint in GBLIN. Method 'receive' lets only the named recipient submit the authorization, so nobody can front-run the transfer; method 'tra","inputSchema":{"type":"object","required":["from","to"],"properties":{"to":{"type":"string","description":"The recipient's address."},"from":{"type":"string","description":"The payer's address: the wallet that will sign."},"relay":{"type":"boolean","description":"true when nobody else will carry the payment on chain: also prepares a second authorization that pays GBLIN's relay fee in GBLIN at the live NAV. Forces method 'transfer'."},"method":{"enum":["receive","transfer"],"type":"string","description":"'receive' (default) can be submitted only by the recipient; 'transfer' by anyone."},"amount_usd":{"type":"string","description":"Amount in USD, converted at the live NAV. Give this or amount_gblin."},"amount_gblin":{"type":"string","description":"Amount in GBLIN shares, e.g. '0.25'. Give this or amount_usd."},"valid_for_seconds":{"type":"number","description":"How long the authorization stays valid. Default 600, maximum 86400."}},"additionalProperties":false},"annotations":{"title":"Prepare a gasless GBLIN payment","readOnlyHint":true,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"payments.prepare\" → \"payments_prepare\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":422,"tokensAfter":422},{"name":"payments.relay","fixed":{"name":"payments_relay","description":"GBLIN's relay carries a signed GBLIN payment on chain for a payer that holds no ETH. Takes the payment and the relay fee, each as { authorization, signature }, both signed by the payer's wallet. The relay checks both against the chain, simulates them and submits them in one transaction through Multicall3: either both settle or neither does. The fee is paid in GBLIN at the live NAV. Returns the transaction hash and its outcome. This tool moves funds: it carries the authorizations exactly as signe","inputSchema":{"type":"object","required":["payment","fee"],"properties":{"fee":{"type":"object","required":["authorization","signature"],"properties":{"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]+$"},"authorization":{"type":"object"}},"description":"{ authorization, signature } of the relay fee, as prepared with relay: true and signed by the payer."},"payment":{"type":"object","required":["authorization","signature"],"properties":{"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]+$"},"authorization":{"type":"object"}},"description":"{ authorization, signature } of the payment, method 'transfer'."}},"additionalProperties":false},"annotations":{"title":"Relay a gasless GBLIN payment","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"payments.relay\" → \"payments_relay\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":332,"tokensAfter":332},{"name":"payments.verify","fixed":{"name":"payments_verify","description":"Checks a signed GBLIN authorization against the chain before any gas is spent on it. Recovers the signer from the EIP-712 digest (and asks the wallet itself through ERC-1271 when the payer is a contract), then checks the validity window against on-chain time, whether the nonce has already been used or cancelled, and whether the payer still holds the amount. Returns a verdict and the ready calldata when it would settle, the failing reason when it would not. These are the checks an x402 facilitato","inputSchema":{"type":"object","required":["authorization","signature"],"properties":{"method":{"enum":["receive","transfer"],"type":"string","description":"Which method the signature was produced for. Default 'receive'."},"signature":{"type":"string","description":"The signature produced by the payer's wallet, 0x-prefixed."},"authorization":{"type":"object","description":"The authorization object: from, to, value, validAfter, validBefore, nonce.","additionalProperties":true}},"additionalProperties":false},"annotations":{"title":"Verify a signed GBLIN authorization","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"payments.verify\" → \"payments_verify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":294,"tokensAfter":294},{"name":"protocol.info","fixed":{"name":"protocol_info","description":"GBLIN llms.txt as plain text: contract addresses, endpoints, prices, payment flow, field contract of the attestation.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Protocol info / llms.txt (free)","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"protocol.info\" → \"protocol_info\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"protocol.stats","fixed":{"name":"protocol_stats","description":"Cumulative public counters of GBLIN's x402 endpoints: paid calls, unique payer wallets, USDC earned, with methodology disclosure. Cached 5 min.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Agent-economy stats (free, cached)","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"protocol.stats\" → \"protocol_stats\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"receipts.get","fixed":{"name":"receipts_get","description":"Receipt #index from GBLIN's receipts log, re-signed (Ed25519 is deterministic) with a fresh inclusion proof, the current signed checkpoint and the latest on-chain anchor. Free.","inputSchema":{"type":"object","required":["index"],"properties":{"index":{"type":"integer","minimum":0,"description":"Receipt index in the log (0-based; current size at GET /log/checkpoint)"}},"additionalProperties":false},"annotations":{"title":"Get a receipt by index","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"receipts.get\" → \"receipts_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"receipts.seal","fixed":{"name":"receipts_seal","description":"Appends the hashes of an AI action to GBLIN's public RFC 6962 transparency log and returns a portable receipt: Ed25519 signature, inclusion proof, operator-signed C2SP checkpoint, and the latest on-chain anchor (EAS on Base, daily). Demo mode only over MCP: 5 seals per day per IP, receipts marked demo: true; unlimited sealing is a separate paid x402 HTTP endpoint. Provenance is self-reported: a receipt proves that the record existed at that time, not that the action happened. The action, agent_i","inputSchema":{"type":"object","required":["action","input_hash"],"properties":{"meta":{"type":"string","maxLength":512,"description":"Extra JSON object as a string (optional). PUBLISHED."},"mode":{"enum":["demo"],"type":"string","default":"demo","description":"Only 'demo' is available over MCP (5/day/IP). Paid seals go through x402 HTTP."},"tool":{"type":"string","maxLength":128,"description":"Tool/model used (optional). PUBLISHED."},"action":{"type":"string","maxLength":128,"minLength":1,"description":"What the AI did, short label. PUBLISHED in the log."},"agent_id":{"type":"string","maxLength":128,"description":"Your agent identifier (optional). PUBLISHED."},"input_hash":{"type":"string","pattern":"^\\s*(0x)?[0-9a-fA-F]{64}\\s*$","description":"sha256 of the input/prompt, 64 hex chars (0x prefix optional)"},"output_hash":{"type":"string","pattern":"^\\s*((0x)?[0-9a-fA-F]{64})?\\s*$","description":"sha256 of the output, 64 hex chars (optional; empty or blank = omitted)"}},"additionalProperties":true},"annotations":{"title":"Seal an AI action (demo receipt)","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"receipts.seal\" → \"receipts_seal\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":434,"tokensAfter":434},{"name":"receipts.verify","fixed":{"name":"receipts_verify","description":"Verifies a gblin-receipt/v1 JSON with pure math, without a log lookup and without trusting this server: leaf hash, Ed25519 signature, RFC 6962 inclusion proof, C2SP checkpoint signature and verifier-key hash. These are the same checks as the zero-dependency verify-receipt.mjs script that runs offline; the consistency check against the on-chain anchor is available separately at GET /v1/verify/:index.","inputSchema":{"type":"object","required":["receipt"],"properties":{"receipt":{"type":"object","description":"A gblin-receipt/v1 JSON, bare or wrapped in {receipt}, as issued by the receipts log (also served at GET /v1/receipt/:i)"}},"additionalProperties":false},"annotations":{"title":"Verify a receipt (pure math)","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"receipts.verify\" → \"receipts_verify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"risk.attestation_sample","fixed":{"name":"risk_attestation_sample","description":"Static, permanently expired sample of the signed Risk Attestation (sample: true), with the same fields and EIP-712 schema as the signed one, for building and testing parsers and verifiers.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Attestation sample (free, expired)","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"risk.attestation_sample\" → \"risk_attestation_sample\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"risk.regime","fixed":{"name":"risk_regime","description":"Current BTC/ETH risk regime (calm | elevated | crash) and the matching risk posture, read live from GBLIN's on-chain Crash Shield on Base (60-second cache). Free and unsigned; a signed version that verifies offline is a separate paid x402 HTTP endpoint.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Market risk regime (live, free)","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"risk.regime\" → \"risk_regime\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"treasury.health","fixed":{"name":"treasury_health","description":"Analyzes an agent wallet's treasury: GBLIN, USDC and ETH balances, whether the ETH covers an exit at the live gas price, and the redemption cooldown. When daily_burn_usd is given it adds days of USDC runway and a split that keeps seven days of spend in USDC and treats only the surplus as a candidate for GBLIN. Free by default; a 0.003 USDC charge applies only when the server operator sets MCP_PAYWALL=true.","inputSchema":{"type":"object","required":["wallet_address"],"properties":{"_payment":{"type":"string","description":"Base64-encoded x402 PaymentProof JSON. Omit on first call to receive the 402 payment manifest."},"daily_burn_usd":{"type":"number","description":"Optional. Average daily spend in USD (e.g. 1.5)."},"wallet_address":{"type":"string","description":"Agent's 0x address."}},"additionalProperties":false},"annotations":{"title":"Analyse an agent treasury","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"treasury.health\" → \"treasury_health\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":242,"tokensAfter":242},{"name":"treasury.nav_history","fixed":{"name":"treasury_nav_history","description":"NAV per GBLIN share over time, read from the chain at past blocks, beside the ETH/USD and BTC/USD oracle prices the vault itself uses, with the change of each over the window and the NAV's largest drawdown. The series starts at the deployment of the vault in service and can be compared with holding ETH or BTC over the same span.","inputSchema":{"type":"object","required":[],"properties":{"points":{"type":"integer","maximum":90,"minimum":2,"description":"How many points, newest last. Default 30."},"interval":{"enum":["hour","day"],"type":"string","description":"Spacing of the points. Default day."}},"additionalProperties":false},"annotations":{"title":"Read the NAV history","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"treasury.nav_history\" → \"treasury_nav_history\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"treasury.plan","fixed":{"name":"treasury_plan","description":"Turns idle USDC into a reviewable plan in one call: operating cash = max(reserve_usd, daily_burn_usd x days), the surplus above it, a simulation of minting that surplus into GBLIN at NAV (fees read live from the vault, estimated exit value today, round-trip cost), the same simulation for a trial amount (100 USDC by default), and the blockers (Crash Shield, redemption cooldown, ETH for the exit). Read-only: nothing is executed and nothing is advised. GBLIN is crypto exposure (cbBTC, WETH, USDC), ","inputSchema":{"type":"object","required":["wallet_address"],"properties":{"days":{"type":"number","description":"Days of spend to keep liquid (default 7, max 365)."},"trial_usdc":{"type":"number","description":"Trial amount to simulate beside the surplus (default 100)."},"reserve_usd":{"type":"number","description":"USD to keep liquid regardless of the burn rate; the larger of the two rules wins."},"daily_burn_usd":{"type":"number","description":"Average daily spend in USD. Operating cash = daily_burn_usd × days."},"wallet_address":{"type":"string","description":"Agent's 0x address."}},"additionalProperties":false},"annotations":{"title":"Plan what to do with idle USDC","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"treasury.plan\" → \"treasury_plan\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":324,"tokensAfter":324},{"name":"treasury.quote","fixed":{"name":"treasury_quote","description":"Preview a buy (ETH→GBLIN) or sell (GBLIN→ETH) without executing. Returns expected output, safe minOut with dynamic slippage buffer (2.5% normal / 4% during Crash Shield), and fee breakdown. Read-only.","inputSchema":{"type":"object","required":["direction","amount_in"],"properties":{"amount_in":{"type":"string","description":"Positive decimal. ETH for buy, GBLIN for sell."},"direction":{"enum":["buy","sell"],"type":"string"}},"additionalProperties":false},"annotations":{"title":"Quote a mint or a redemption","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"treasury.quote\" → \"treasury_quote\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"treasury.state","fixed":{"name":"treasury_state","description":"Reads the current GBLIN protocol state on Base mainnet: NAV in USD, basket composition with dynamic weights, Crash Shield status and whether the NAV is reliable.","inputSchema":{"type":"object","required":[],"properties":{},"additionalProperties":false},"annotations":{"title":"Read the GBLIN protocol state","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"treasury.state\" → \"treasury_state\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":82,"tokensAfter":82}],"toolsChanged":22,"tokensSaved":0,"todo":[{"tool":"treasury_quote","params":["direction"]}],"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."}