Skip to main content
Glama
@gblin-protocol/mcp-server

@gblin-protocol/mcp-server

GBLIN MCP Server

Model Context Protocol server for the GBLIN protocol on Base mainnet: an on-chain index of cbBTC, WETH and USDC whose shares are minted at NAV and redeemed pro rata in kind. The server reads live state, verifies governance and risk attestations, and returns unsigned calldata to enter, leave and bid. It never holds keys, signs or broadcasts.

Published on npm as @gblin-protocol/mcp-server.

npm CI License: MIT Base Mainnet Governance: 48h Timelock x402 Manifest MCP Registry Smithery Glama score

Documentation and quick start: gblin.digital/agents. Starter examples: examples/.

Features

  • Market risk regime (calm / elevated / crash) read from the vault's on-chain Crash Shield, with a severity score and a risk posture

  • Quotes at NAV for minting and redeeming, with a dynamic slippage buffer

  • One tool that prepares any operation on the vault (mint with ETH, WETH or USDC, redeem in kind, exit to ETH or USDC, bid in the auction), each step with its gas limit

  • Simulation of those steps before signing, in sequence against the latest block, with decoded revert reasons and the gas limit each vault step really needs

  • The outcome of a sent transaction, and the NAV per share over time beside ETH and BTC

  • Treasury health of an agent wallet: balances, gas runway, cooldown, allocation advice

  • Governance verification: owner, pending owner, timelock roles and scheduled operations, computed from the chain

  • The state of the rebalancing auction, row by row, with the bid to send

  • Gasless payments in GBLIN (EIP-3009): prepare the authorization to sign, check it against the chain before anyone spends gas, and, when nobody else will carry it, have GBLIN's relay settle it with the fee in GBLIN, in one atomic transaction

  • Offline verification of Risk Attestations (EIP-712) and of AI Action Receipts (RFC 6962)

  • A portable skill seed to onboard a peer agent

  • Four prompts (ready-made workflows) and four resources (deployment, payments, keys, limits)

  • An outputSchema on every tool that returns an object, so a client can validate results and generate types

Every tool is free. The server never charges: revenue comes from the on-chain protocol fee when an agent actually uses GBLIN. Verifiable pay-per-call lives on the HTTP endpoints listed under x402 endpoints.

Related MCP server: mcp-server

Contracts (Base mainnet, chain id 8453)

Component

Address

Role

Vault

0xc2181d975c05c8c724b334bcED0764c0b86B1D53

The ERC-20 share and the basket. Mints at NAV, redeems in kind, rebalances by Dutch auction, accepts payments by signature (EIP-3009). Never swaps.

Lens

0xfCFea8027019E8551A1f09AD91532471F5D26f61

Read-only views beside the vault: quotes, configuration, basket rows, auction state.

Zap

0x0E9D6Ceb6D313b021622C121Cda9C62e86e60200

The only contract that swaps: mints with any token, exits to ETH by redeeming in kind and selling every leg, all or nothing.

Timelock

0x6aBeC8716fFeEcf7C3D6e68255b4797113E8e5Dd

48-hour minimum delay, 14-day grace period, open executor. Proposer and canceller roles are held by a 2-of-3 Safe (0xc7AeFcfC871bA51FA2ddfE3117b69AC055C98eF1).

Previous deployments (0x36C81d7E1966310F305eA637e761Cf77F90852f0, 0x38DcDB3A381677239BBc652aed9811F2f8496345) are superseded. Nothing is read from them; holders migrate through the web app.

Fees: 0.10% on every mint with ETH or WETH (0.05% stays in the vault and lifts the NAV of every share, 0.05% is minted as shares to the fee recipient); in-kind deposits pay a 0.50% floor plus a deviation tax; a 0.50% yearly management fee accrues as shares; redemption in kind and transfers carry no fee.

Hosted variant

A stateless Streamable HTTP server runs at https://mcp.gblin.digital/mcp — no install, no auth, no session, 60 requests per minute per IP. It serves the vault, action and payment tools of this package under two-level names (treasury.*, actions.*, payments.*, governance.state, auction.state, attestation.verify), built from the same source, plus the risk, receipts and coherence tools; the snake_case names below are accepted there as aliases. It also serves search and fetch, the two read-only tools research clients expect (ChatGPT deep research among them): search returns matching documents (the protocol's documentation, one card per tool, the live vault state) and fetch returns one document's full text. Every step returned by the action tools carries both spellings, target/calldata and to/data/chainId, so it maps one to one onto wallet batch APIs such as send_calls. GET-only audit surfaces: /meta, /tools.json, /resources.json, /conformance. Also listed on Smithery. A second surface, https://mcp.gblin.digital/mcp/directory, serves the same tools except payments.relay, the one tool that submits a signed transfer on the caller's behalf; it exists for connector directories that accept software which reads, simulates, verifies and prepares unsigned calldata but not software that executes transfers. /meta reports it under directory_surface.

Agent treasury (library and CLI)

packages/agent-treasury — npm @gblin-protocol/agent-treasury. Operating cash stays in USDC, the surplus above a reserve is parked in GBLIN, and USDC is pulled back from GBLIN just in time when an x402 invoice arrives. The x402 client is Coinbase's reference x402Client with the refill attached to its onBeforePaymentCreation hook, so a 402 for USDC on Base triggers the refill before the authorization is signed and a price above the cap is refused before anything is signed. Self-custody, no key leaves the process. Verified end to end on a fork of Base (24 checks: park, refill, cooldown, a mock invoice with the challenge bytes of gblin.digital and a verified EIP-712 signature, the cap).

export GBLIN_AGENT_PRIVATE_KEY=0x...
npx @gblin-protocol/agent-treasury status --json
npx @gblin-protocol/agent-treasury park --json
npx @gblin-protocol/agent-treasury pay https://gblin.digital/api/x402/attestation --max-amount 3000 --json

The matching agent skill is skills/gblin-agent-treasury (npx skills add gblinproject/gblin-treasury-risk-regime). Details: packages/agent-treasury/README.md.

API

Tools

  • get_market_risk_regime

    • The BTC/ETH risk regime derived from the vault's Crash Shield: calm, elevated or crash, with severity_pct, a risk_posture (risk_on / reduce / risk_off), the defensive cash weight and one entry per risk asset

    • Inputs: none

    • Call it before any action that deploys capital; a crash reading means stand down

  • get_treasury_state

    • NAV in USD, ETH price, whether the vault can price itself (nav_reliable), the yearly management fee, whether an auction is open, Crash Shield status and the basket rows with base and dynamic weights

    • Inputs: none

  • quote_safe_swap

    • Previews a mint (ETH→GBLIN) or a redemption (GBLIN→ETH) through the Lens, with a safe minimum output under the dynamic slippage buffer (2.5% normally, 4% while the Crash Shield is active) and the fee breakdown

    • Inputs:

      • direction (string): buy or sell

      • amount_in (string): decimal amount of ETH (buy) or GBLIN (sell)

  • swap_gblin_to_usdc_jit

    • Unsigned calldata to turn GBLIN into a given amount of USDC just in time: approve the shares to the Zap, the Zap's sellGBLINForEth (redeem in kind and sell every leg, all or nothing), then a WETH→USDC swap. Three transactions; ERC-4337 and EIP-7702 wallets batch them into one

    • Inputs:

      • usdc_needed (string): decimal USDC amount

      • wallet_address (string): the agent's address, for the cooldown check and as receiver

    • Every step carries a minimum output; the last step's input is the guaranteed minimum of the previous one

  • invest_usdc_to_gblin

    • Unsigned calldata to mint GBLIN with USDC through the Zap: approve USDC, then one call that swaps to WETH and mints at NAV. Two transactions

    • Inputs:

      • usdc_amount (string): decimal USDC amount

      • wallet_address (string): receiver of the shares

    • Both bounds travel with the call: the minimum WETH from the swap and the minimum shares from the mint

  • analyze_treasury_health

    • GBLIN, USDC and ETH balances of a wallet, gas health, the vault's cooldown for that wallet, and an allocation recommendation with the runway in days when a burn rate is given

    • Inputs:

      • wallet_address (string)

      • daily_burn_usd (number, optional): average daily spend, enables the runway estimate

  • plan_treasury

    • Idle USDC to a reviewable plan in one call: the operating cash to keep liquid (max(reserve_usd, daily_burn_usd × days)), the surplus above it, a simulation of minting that surplus at NAV with every fee read live and the estimated value of exiting the same position today (round-trip cost included), the same simulation for a trial amount, the blockers (crash shield, cooldown, ETH for the exit) and the tools to call after a human confirms. Reads only; nothing is executed and nothing is advised

    • Inputs:

      • wallet_address (string)

      • daily_burn_usd (number, optional): average daily spend in USD

      • days (number, optional): days of spend to keep liquid, default 7

      • reserve_usd (number, optional): USD to keep liquid regardless of the burn rate; one of daily_burn_usd or reserve_usd is required

      • trial_usdc (number, optional): trial amount to simulate beside the surplus, default 100

    • The same plan is served over HTTP at https://gblin.digital/api/x402/plan

  • get_governance_state

    • Owner and pending owner of the vault, the fee recipient, the timelock's minimum delay and roles, and, when the pending owner is the timelock, the deterministic id and state of the scheduled acceptOwnership operation

    • Inputs:

      • operation_id (string, optional): a timelock operation id (bytes32) to inspect

  • share_skill_with_peer

    • A portable JSON seed another agent can use to install this server and start: install instructions, the tool list, contract addresses, a worked example and the caller's ERC-8021 builder code for attribution

    • Inputs:

      • caller_wallet (string)

      • peer_context (string, optional): what the peer does, to tailor the example

      • example_amount_usdc (number, optional)

  • get_auction_state

    • The rebalancing auction: whether it is open, the current premium over the oracle price and its curve, and one entry per basket row with the side the vault takes, the gap in ETH, the token and amount the bidder hands over, and unsigned calldata for the approval and the bid. best is the row with the largest gap

    • Inputs: none

    • The premium is the whole reward; nothing is paid out of the vault. The input is reduced to what closes the gap

  • prepare_gblin_payment

    • Builds a gasless GBLIN payment. The share token implements EIP-3009, the same mechanism USDC uses: the holder signs an authorization and anybody can carry it on chain, so the payer needs no ETH. Returns the EIP-712 message to sign, the amount in shares and atomic units, the payer's balance, the x402 "exact" payload for paying an HTTP endpoint in GBLIN, and the accepts block a seller publishes to be paid in GBLIN

    • Inputs:

      • from (string): the payer, the wallet that will sign

      • to (string): the recipient

      • amount_gblin (string) or amount_usd (string): the amount, converted at the live NAV when given in USD

      • method (string, optional): receive (default) can be submitted only by the recipient, so nobody can front-run it; transfer can be submitted by anyone, which is what an x402 facilitator does

      • valid_for_seconds (number, optional): default 600, maximum 86,400

    • The EIP-712 domain is read from the token through EIP-5267, never assumed. No private key is requested, held or transmitted

  • verify_gblin_authorization

    • Checks a signed authorization against the chain before anyone spends gas on it: recovers the signer from the digest, or 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 been used or cancelled, and whether the payer still holds the amount. Returns a verdict, the failing reasons, and the ready calldata when it would settle

    • Inputs:

      • authorization (object): from, to, value, validAfter, validBefore, nonce

      • signature (string): produced by the payer's wallet

      • method (string, optional): receive (default) or transfer

    • These are the checks an x402 facilitator runs, so a would_settle verdict means the payment is good to carry

  • relay_gblin_payment

    • Hands a signed payment and a signed relay fee to GBLIN's relay (https://gblin.digital/api/relay/gblin), which checks both against the chain, simulates them and submits them in one transaction through Multicall3: both settle or neither does. For a payer that holds no ETH and has nobody to carry the payment

    • Inputs:

      • payment (object): { authorization, signature }, method transfer

      • fee (object): { authorization, signature } from the relay block of prepare_gblin_payment called with relay: true

    • The fee is quoted live by the relay, in GBLIN at the NAV. This tool moves funds: it is marked destructive so clients ask before running it

  • prepare_action

    • Builds the unsigned steps for any operation on the vault, in order, each through the vault or the Zap carrying its gas limit

    • Inputs:

      • action (string): mint_with_eth, mint_with_weth, mint_with_usdc, redeem_in_kind, exit_to_eth, exit_to_usdc or bid

      • wallet_address (string): the wallet that will sign and receive

      • amount (string): in ETH, WETH or USDC for mints, in shares for redemptions and the ETH exit, the USDC needed for the USDC exit; not used by bid

      • row (integer, optional): bid only, the basket row; default the largest gap

    • Returns the steps, what they should deliver with the minimums applied, and warnings such as an active cooldown or an amount above the balance

  • preview_steps

    • Simulates a list of transactions in sequence against the latest block with eth_simulateV1, each seeing the state the previous ones left. Returns, per step, success, gas used, whether the given limit is enough, the recommended limit and the decoded revert reason with a hint; and the net token and ETH movements for the wallet

    • Inputs:

      • from (string): the wallet that will send the steps

      • steps (array): the steps as the tools return them: target, calldata, optional value and gas

    • For steps into the vault or the Zap the recommended limit is the smallest one that passes, found by bisection: the vault reserves gas for its capped transfers, so the gas a call uses is below the limit it needs

    • gas_limit_enough is true when the step passes with the limit it carries, false only when that limit is what makes it fail, and null when it fails for another reason (a slippage bound, a cooldown), which error and hint name

  • get_transaction_status

    • What a sent transaction did: pending, success, reverted or not found; block, confirmations, fee, net token movements for the sender, and the decoded reason when it reverted

    • Inputs: hash (string)

  • get_nav_history

    • NAV per share over time, read at past blocks, beside the ETH/USD and BTC/USD feeds the vault uses, with the change of each over the window and the NAV's largest drawdown. History starts at the deployment of the vault in service

    • Inputs: interval (hour or day, default day), points (2 to 90, default 30)

    • Historical reads use public endpoints that serve them; set GBLIN_ARCHIVE_RPC_URL to use your own

  • verify_risk_attestation

    • Verifies a Risk Attestation offline: recomputes the EIP-712 id, recovers the signer and checks it against the published attestor, checks freshness, and reports the live drift of the regime since issuance

    • Inputs:

      • attestation (object): the object returned by GET https://gblin.digital/api/x402/attestation

      • expected_attestor (string, optional): the attestor address to pin

    • Accepts EIP-712 domain version 2 (verifying contract = the vault in service) and version 1 (the previous deployment); the version the attestation declares selects the domain

  • seal_action_demo

    • Seals the hashes of an AI action into the public transparency log (demo: 5 per day per IP, receipt marked demo: true) and returns the portable receipt

    • Inputs:

      • action (string): a short label

      • input_hash (string): SHA-256 of the input

      • output_hash (string, optional)

      • agent_id, tool, meta (string, optional): identifiers, published in clear

    • Unlimited seals are a paid x402 HTTP endpoint; see how_to_seal_paid

  • get_receipt

    • A sealed receipt by index: canonical payload, Ed25519 signature, RFC 6962 inclusion proof and the signed checkpoint

    • Inputs:

      • index (integer)

  • how_to_seal_paid

    • How to seal without limits: endpoint, body schema, payment flow and offline verification

    • Inputs: none

Tool annotations (MCP hints)

Every tool sets MCP tool annotations:

Tool

readOnlyHint

idempotentHint

destructiveHint

openWorldHint

all except the three below

true

true

false

true

prepare_gblin_payment

true

false

false

true

seal_action_demo

false

false

false

true

relay_gblin_payment

false

true

true

true

Calldata builders are read-only: they return bytes, they do not send them. prepare_gblin_payment is not idempotent because every call draws a fresh nonce. Sealing appends to a public log and is never destructive. relay_gblin_payment moves the payer's funds on chain, so it is marked destructive and clients should confirm before calling it. Every tool also carries a human-readable title.

Output schemas

Every tool except seal_action_demo declares an outputSchema. A successful result carries the same object as structuredContent and as JSON text. The required list of each schema is the contract: fields a successful call always returns. Other fields are described but optional, and the schemas accept additional fields, so adding one is not a breaking change. Errors carry isError: true and no structured content.

Prompts

Prompt

What it does

risk_gate

Reads the regime and applies a rule stated before looking: proceed, halve, or stand down

pay_in_gblin

Prepare, sign in the payer's wallet, verify, then hand on a gasless GBLIN payment

pay_invoice_just_in_time

Exit just enough GBLIN to USDC to settle an invoice, after checking cooldown and gas

seal_and_verify

Seal an action, read the receipt back, and state what it does and does not prove

Resources

URI

Content

gblin://contracts

Every contract in service with its role, and the deprecated deployments not to use

gblin://payments

The EIP-712 domain read live from the token, the x402 payload, and the accepts block a seller publishes

gblin://keys

The attestor address to pin, and where the log and witness keys are published

gblin://limits

Price (free by default), the metering switch, and where the limits come from

Usage

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "gblin": {
      "command": "npx",
      "args": ["-y", "@gblin-protocol/mcp-server"]
    }
  }
}

Cursor, Windsurf and other MCP clients

{
  "mcpServers": {
    "gblin": {
      "command": "npx",
      "args": ["-y", "@gblin-protocol/mcp-server"],
      "env": { "GBLIN_RPC_URL": "https://base-rpc.publicnode.com" }
    }
  }
}

Programmatic (TypeScript)

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const transport = new StdioClientTransport({ command: "npx", args: ["-y", "@gblin-protocol/mcp-server"] });
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);

const jit = await client.callTool({
  name: "swap_gblin_to_usdc_jit",
  arguments: { usdc_needed: "0.50", wallet_address: "0xYourAgent..." },
});

AGENTS.md for coding assistants

npx -p @gblin-protocol/mcp-server gblin-init

Creates an AGENTS.md from the template at gblin.digital/AGENTS.template.md, or appends a delimited block to an existing one. Idempotent; --dry-run previews, --force refreshes the block. No files are written at install time; set GBLIN_SKIP_HINT=1 to silence the post-install hint.

Configuration

GBLIN_RPC_URL selects the Base RPC endpoint; the default is https://base-rpc.publicnode.com. For sustained load use a dedicated provider:

export GBLIN_RPC_URL="https://base-mainnet.g.alchemy.com/v2/YOUR_KEY"
npx @gblin-protocol/mcp-server

GBLIN_ATTESTOR_ADDRESS overrides the published attestor address used by verify_risk_attestation.

x402 endpoints

Pay-per-call data lives on HTTP, settled in USDC on Base through the Coinbase CDP facilitator with gasless EIP-3009 transferWithAuthorization. Clients such as @x402/fetch handle the 402 challenge, the signature and the retry.

Endpoint

Price

Returns

GET gblin.digital/api/x402/treasury-state

free

NAV, basket weights, Crash Shield status

GET gblin.digital/api/x402/quote

free

Mint or redemption preview with the dynamic slippage buffer

GET gblin.digital/api/x402/governance

free

Owner, timelock, pending operations

GET gblin.digital/api/x402/health

free

Wallet balances, gas runway, allocation advice

GET gblin.digital/api/x402/invest

free

Unsigned calldata: USDC → GBLIN

GET gblin.digital/api/x402/jit

free

Unsigned calldata: GBLIN → USDC just in time

GET gblin.digital/api/x402/attestation

$0.003

Signed EIP-712 Risk Attestation, valid ten minutes

POST gblin.digital/api/x402/seal

$0.0045

A sealed AI Action Receipt

Machine-readable manifest: https://gblin.digital/.well-known/x402. Payment recipient: 0x0ebA5d314F4f5Dcb7A094953Fa9311a45172dd1B.

Risk Attestation

GET https://gblin.digital/api/x402/attestation returns a ten-minute, verifiable snapshot of the BTC/ETH risk regime, signed under the EIP-712 domain GBLIN Risk Attestation, version 2, chain 8453, verifying contract = the vault in service. The response embeds its domain, types and message under eip712; a verifier recovers the signer and checks it against the published attestor address, which it should pin. verify_risk_attestation does this offline and also accepts attestations issued under domain version 1.

AI Action Receipts

A public, append-only RFC 6962 transparency log for AI actions. Input and output go in as hashes only; the short action, agent_id, tool and meta strings are published in clear, so put identifiers there, never secrets. Each seal returns a portable receipt:

receipt = canonical payload
        + Ed25519 signature            (key: gblin.digital/receipts-log)
        + RFC 6962 inclusion proof     (leaf → Merkle root)
        + C2SP signed checkpoint       (origin, tree size, root)

Canonicalization is frozen as gblin-canonical-json/1: object keys sorted by UTF-16 code unit, no whitespace, JSON.stringify semantics for primitives, recursion for objects and arrays. Test vector: payload {"b":1,"a":null} → canonical {"a":null,"b":1} → leaf = SHA256(0x00 || canonical_bytes). The receipt signature is Ed25519 over "gblin-receipt/v1\n" + canonical.

  • Seal (paid, unlimited): POST https://gblin.digital/api/x402/seal, $0.0045 USDC via x402

  • Seal (demo, 5 per day per IP): POST <worker>/v1/seal-demo, or the tool seal_action_demo

  • Read, free: <worker>/v1/receipt/:index, /log, /log/checkpoint, /log/proof/:index, /log/consistency, /log/leaves, and the page /receipt/:index

  • Daily anchor of the tree root on Base as an EAS attestation (schema 0x9f433a96…)

  • Offline verifier with no dependencies: verify-receipt.mjs — node verify-receipt.mjs receipt.json

The checkpoint is signed by the log operator and cosigned by an independent witness (Markovian Protocol). A cosignature attests that the log stayed append-only between the sizes the witness saw; it does not attest that a receipt's content is true. A seal proves existence and time; it is not a compliance certificate and not an endorsement. <worker> = https://gblin-mcp.gblin-mcp-worker.workers.dev.

Coherence Proof

GBLIN pre-registers hash-pinned promises and runs an automaton that probes them every ten minutes and seals each closed day as an EAS attestation on Base. Free report: /coherence. Live promises: uptime of the paid attestation endpoint, and honesty of the public agent-economy counters, with the protocol's own wallets disclosed. GBLIN is a registered ERC-8004 agent (#59286).

Architecture notes

  • Mint at NAV, redeem in kind. The vault prices every mint from Chainlink feeds and issues shares against the deposit; redemption pays the exact pro-rata slice of every basket row, reads no price feed and cannot be paused. The vault never swaps.

  • The Zap swaps. Entering with a token other than ETH or WETH, and leaving to ETH or USDC, go through the Zap, which swaps on a venue and mints or redeems on the vault in the same call. Exits are all or nothing: a leg that cannot be sold reverts the whole transaction instead of paying out less.

  • Rebalancing is a Dutch auction. When a row drifts past its band the vault opens an auction; the counterparty trades toward the target weights at the oracle price adjusted by a premium that starts at a discount and rises to a cap over one ramp. get_auction_state exposes it.

  • Dynamic slippage. Minimum outputs are quoted from the Lens and buffered by 2.5%, or 4% while the Crash Shield is active. No calldata leaves this server with a zero minimum on a swap.

  • Cooldown. The vault refuses a redemption for a short window after the same address minted; the window is read live and reported by analyze_treasury_health.

  • Payments by signature. The vault implements EIP-3009 (transferWithAuthorization, receiveWithAuthorization, cancelAuthorization), so an agent can settle in GBLIN the way it settles in USDC. Transfers carry no fee.

Security notes

  • The server is read-only: it never holds, signs or broadcasts. Calldata is plain ABI-encoded bytes for the agent's own wallet to review and send.

  • Every quote comes from on-chain calls and Chainlink feeds. A stale or non-positive ETH/USD answer aborts the tool with an explicit error rather than a bad number; the vault's own isNavReliable is reported alongside.

  • No telemetry, no analytics, no remote dependencies beyond the configured RPC.

Development

git clone https://github.com/gblinproject/gblin-treasury-risk-regime
cd gblin-treasury-risk-regime
npm install
npm run build
npm test                 # handler smoke test against Base mainnet, read-only
npm run test:protocol    # speaks MCP over stdio: capabilities, instructions, prompts, resources
npm run test:schemas     # every tool through the official MCP client, which validates outputSchema
npx tsx scripts/test-hosted.ts <url>   # the hosted server over Streamable HTTP, with the same validation
npm start                # run the compiled server

Two tests run against a local fork of Base and send transactions there, never on mainnet:

anvil --fork-url <base rpc> --port 8555 &
export GBLIN_RPC_URL=http://127.0.0.1:8555
npm run test:payments    # gasless payment: signed, verified, carried by a third party; replay and front-run refused
npm run test:calldata    # sends the exit and investment steps exactly as the tools return them
npm run test:actions     # every prepare_action, simulated then sent; preview agrees with the chain; gas limits found by bisection
src/
  config.ts    # addresses, slippage and cache settings
  abi.ts       # vault, Lens, Zap, timelock, Chainlink and ERC-20 ABIs
  client.ts    # viem public client and on-chain timestamp
  helpers.ts   # NAV, basket state, slippage, cooldown, reverse quote
  auction.ts   # auction state and bid sizing
  tools.ts     # the treasury, auction and risk tools, and the tool list
  payments.ts  # gasless payments (EIP-3009): prepare, verify, relay
  actions.ts   # prepare_action, preview_steps, get_transaction_status, get_nav_history
  shared.ts    # result envelopes, builder code, Zap routing data and gas limit
  version.ts   # generated from package.json by scripts/write-version.mjs
  receipts.ts  # the three receipt tools
  output-schemas.ts  # the outputSchema of every tool
  prompts.ts   # the four prompts
  resources.ts # the four resources
  index.ts     # MCP stdio server entry and initialize instructions
  init.ts      # the gblin-init command
worker/        # the hosted Streamable HTTP server (Cloudflare Workers)
scripts/       # test.ts, test-protocol.ts, test-output-schemas.ts, test-payments-fork.ts, test-calldata-fork.ts

MIT © GBLIN Protocol

Available Tools

21 tools
analyze_treasury_healthA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
_paymentNoBase64-encoded x402 PaymentProof JSON. Omit on first call to receive the 402 payment manifest.
daily_burn_usdNoOptional. Average daily spend in USD (e.g. 1.5).
wallet_addressYesAgent's 0x address.

Output Schema

NameRequiredDescription
ratiosNo
walletYes
balancesYes
cooldownYesWhether the redemption cooldown is active and for how long.
gas_healthYesWhether the wallet holds enough ETH for the next transactions.
recommendationYeshold, rebalance_to_gblin or rebalance_to_usdc, with the reason.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive profile, so the bar is lower; the description still adds real behavior the annotations can't express — the live-gas-price exit check, the cooldown read, and crucially the pricing model (free by default, 0.003 USDC only when the operator sets MCP_PAYWALL=true). It does not describe response shape, but that is covered by the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core capability, then the conditional parameter behavior, then the payment caveat — a sensible ordering. It is dense but each clause carries information; the payment sentence is the only part that could arguably be trimmed, though the cost disclosure is worth keeping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 3-parameter schema, full schema descriptions and an output schema, the description covers everything an agent needs to call it correctly: inputs, computed outputs, conditionality on daily_burn_usd, and cost. The only missing element — sibling differentiation — is scored under purpose/usage rather than completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema: it explains that daily_burn_usd triggers runway-in-days computation and a specific allocation split (seven days of spend kept in USDC, only surplus considered for GBLIN). That is decision-relevant semantics the schema does not contain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Analyzes') and resource ('an agent wallet's treasury') and enumerates the computed outputs: GBLIN/USDC/ETH balances, whether ETH covers an exit at live gas price, and the redemption cooldown. It is clear what the tool does, but it never distinguishes itself from the nearby get_treasury_state or plan_treasury siblings, leaving the agent to infer which treasury view to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a conditional usage signal ('When daily_burn_usd is given it adds days of USDC runway...'), which tells the agent what changes with the optional parameter. However, it offers no when-to-use/when-not guidance relative to get_treasury_state or plan_treasury, so the choice among the three treasury tools is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_auction_stateA
Read-onlyIdempotent
Inspect

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 premium is the whole reward; nothing is paid out of the vault.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
bestNoThe row with the largest gap, or null.
lensNo
noteNo
rowsYesOne entry per basket asset: side, gap from target and amount a bidder can fill.
curveNo
vaultYes
howToBidNo
openedAtNoWhen the auction opened, or null when closed.
premiumBpsYesCurrent premium over the oracle price, in basis points; negative is a discount.
auctionOpenYes
navReliableYes
worstGapEthNo
totalValueEthNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds substantial context beyond that: the Dutch-auction mechanics, the premium ramp from discount to cap, the fact that the vault pays nothing, and that returns include unsigned approval+bid calldata. It omits auth requirements and rate limits, but the domain behavior is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, and the prose is dense with domain information rather than filler. It runs long and the closing line ('nothing is paid out of the vault') partially restates earlier context, but every sentence conveys information useful for interpreting the auction state.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't enumerate return fields, yet it usefully frames what each row means. Combined with zero parameters and full annotation coverage, the definition is nearly complete; the only shortfall is the absence of explicit invocation guidance relative to sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain; the baseline for a no-arg tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource — 'Read the GBLIN rebalancing auction on Base' — and the following sentences define exactly what the tool surfaces (per-row side, ETH gap, token/amount, unsigned calldata). An agent can distinguish this from siblings like get_treasury_state or get_governance_state without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the auction's existence condition ('when a basket row drifts past its band'), which implies the tool is worth calling to find rebalancing opportunities, but it never explicitly states when to call it, when not to, or how it relates to alternatives like quote_safe_swap or prepare_action. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_governance_stateA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
operation_idNoOptional 0x-prefixed 32-byte hex id of a specific timelock operation to inspect.

Output Schema

NameRequiredDescription
lensNo
ownerYes
vaultYes
timelockYesAddress and minimum delay of the timelock, read on chain.
verificationNo
fee_recipientNo
trust_summaryNo
pending_handoverNoA pending ownership transfer, or null.
owner_is_timelockYes
owner_is_renouncedYes
pending_timelock_operationNoA scheduled timelock operation affecting ownership, or null.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered; the description adds useful behavioral detail — the exact governance facets read and that passing operation_id changes the response to include that operation's status. It does not mention permission requirements or freshness/caching, hence not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the core governance read first and the optional operation_id behavior second; nothing is redundant except the trailing 'Read-only', which is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary; for a zero-required-param, single-optional-param read tool the description covers scope, the optional path, and safety fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already defines the 0x 32-byte hex format, so baseline would be 3; the description earns a bump by explaining the semantic effect of supplying operation_id (status of that specific timelock operation), which the schema only calls 'inspect'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Reads') plus a named resource ('GBLIN protocol governance') followed by an enumeration of what is returned: vault ownership by the timelock, min delay, grace period, role member counts, pending proposals. This clearly separates it from siblings like get_treasury_state or get_auction_state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage by describing the content (governance/timelock inspection) and notes the optional operation_id path, but never states when to prefer this over get_treasury_state or the other state tools, and gives no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_risk_regimeA
Read-onlyIdempotent
Inspect

Returns the current BTC/ETH risk regime (calm | elevated | crash), a severity score and the matching risk posture (risk_on | reduce | risk_off), derived from GBLIN's on-chain Crash Shield against Chainlink oracle peaks on Base. Independent of holding GBLIN. Free by default; a 0.002 USDC charge applies only when the server operator sets MCP_PAYWALL=true.

NameRequiredDescriptionDefault
_paymentNoBase64-encoded x402 PaymentProof JSON. Omit on first call to receive the 402 payment manifest.

Output Schema

NameRequiredDescription
metaNo
assetsNo
regimeYes
sourceNo
verifyNo
risk_postureNo
severity_pctYes
shield_activeYes
defensive_cash_pctYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered; the description adds real beyond-schema context by naming the data provenance (Crash Shield vs Chainlink oracle peaks on Base) and the exact cost model (free unless MCP_PAYWALL=true, then 0.002 USDC). It omits freshness/caching behavior for a 'current' reading, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the returned values and enums, then provenance, then payment terms — no filler. The paywall sentence is long and slightly dense, but every clause carries operative information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description only needs to add cost, provenance and access preconditions — and it does all three. An agent can decide to call it and handle the paywall branch without further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and _payment is fully documented there, so the baseline is 3; the description earns a bump by explaining the payment condition that motivates the _payment proof parameter. It still doesn't restate the omit-on-first-call 402 handshake, but the schema handles that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource with enumerated outputs ('risk regime (calm | elevated | crash)', severity score, posture), which lets an agent predict the return shape precisely. It does not explicitly contrast with the nearest sibling (verify_risk_attestation), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies a prerequisite-style condition ('Independent of holding GBLIN') but never states when to call this versus alternatives such as verify_risk_attestation or how the regime should gate other flows. Usage is implied by the resource name rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nav_historyA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
pointsNoHow many points, newest last. Default 30.
intervalNoSpacing of the points. Default day.

Output Schema

NameRequiredDescription
noteNo
methodNo
pointsYes
seriesYesOldest first: time, block, NAV in ETH and USD, ETH/USD and BTC/USD.
summaryNoChange of NAV, ETH and BTC over the window, and the NAV's largest drawdown.
intervalYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real behavioral context beyond that: values are read from the chain at past blocks rather than live, and the series is bounded by the vault's deployment date. It does not discuss sampling cost or how reorgs/past-block reads are handled, but the essential traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns and followed by the data-window constraint and comparison use case. Slightly dense in the opening clause, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not enumerate return fields, and it correctly focuses on data provenance and window semantics. Combined with full parameter documentation and annotations, an agent has enough to call this correctly; only the ambiguity against analytical siblings remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – both 'points' (2-90, default 30) and 'interval' (hour/day, default day) are documented in the schema, including defaults and the 'newest last' ordering. The description adds nothing about the parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource and metric (NAV per GBLIN share over time) plus the bundled series (ETH/USD and BTC/USD oracle prices, window change, max drawdown). It is unambiguous about what comes back. It does not explicitly contrast with any sibling, though no sibling covers NAV history, so the risk of confusion is low.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'can be compared with holding ETH or BTC over the same span' suggests an analyst comparing vault performance against benchmarks. There is no explicit when-to-use, when-not-to-use, or named alternative among siblings such as get_treasury_state or analyze_treasury_health, which an agent would have to disambiguate on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_receiptA
Read-onlyIdempotent
Inspect

Fetch a sealed AI Action Receipt by index from GBLIN's public transparency log (free forever). Returns the full portable receipt — canonical payload, Ed25519 signature, RFC 6962 Merkle inclusion proof against the current tree, operator-signed C2SP checkpoint — which any third party can verify offline with verify-receipt.mjs (zero dependencies).

NameRequiredDescriptionDefault
indexYesZero-based index of the receipt in the log (see the log overview at https://gblin-mcp.gblin-mcp-worker.workers.dev/log for the current size).

Output Schema

NameRequiredDescription
leafNo
noteNo
rootNo
indexYes
anchorNo
formatNo
verifyNoHow to verify this receipt.
payloadYesThe sealed record as signed.
signatureYes
tree_sizeNo
checkpointNo
human_pageNo
provenanceNo
verifier_keyNo
verify_offlineNo
inclusion_proofYesSibling hashes from the leaf to the root (RFC 6962).
canonical_sha256No
canonicalizationNoThe canonical JSON form the leaf is hashed from.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety traits (readOnlyHint, idempotentHint, destructiveHint, openWorldHint). The description adds meaningful behavioral context beyond annotations: the log is public and free forever, the returned receipt is portable and includes canonical payload, Ed25519 signature, RFC 6962 Merkle inclusion proof, and C2SP checkpoint, and it can be verified offline with verify-receipt.mjs. It does not mention rate limits or error behavior for out-of-range indices, but it adds substantial value over the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and scope in the first sentence, followed by return details in the second. It is appropriately sized for a technically rich tool, though phrases like 'free forever' and 'zero dependencies' are mildly promotional and not strictly necessary for invocation correctness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description is complete for an agent to call the tool correctly. It supplements the structured fields with verification context and return composition, and no critical invocation information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single index parameter is fully documented in the schema, including zero-based semantics and a link to the log overview. The description only repeats 'by index' without adding new syntax or format details. Baseline 3 is appropriate when the schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetch a sealed AI Action Receipt by index from GBLIN's public transparency log. It is clearly distinguishable from sibling tools like seal_action_demo or verify_risk_attestation, which perform different operations on related concepts. An agent can identify exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies the use case: retrieve a receipt when you have its index and want the full verifiable artifact. However, the description does not explicitly state when to use this tool versus alternatives such as verify_risk_attestation or get_transaction_status, nor does it provide exclusions or prerequisites. Usage is therefore implied but not fully guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transaction_statusA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
hashYesThe transaction hash.

Output Schema

NameRequiredDescription
toNo
fromNo
hashYes
noteNo
blockNo
revertNo
statusYes
fee_ethNo
explorerNo
gas_usedNo
gas_limitNo
confirmationsNo
balance_changesNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety behavior is covered. The description adds meaningful behavioral context beyond annotations: pending/succeeded/reverted/not found outcomes, block and confirmation reporting, fee paid, token movements, and decoded revert reasons. It does not discuss operational limits such as caching or rate limits, but it substantially improves transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that immediately states what the tool reports, followed by a tightly packed list of relevant outcomes. Every clause maps to useful behavior or return information, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema, annotations, and fully documented input parameter, the description is complete enough for an agent to understand the tool's purpose and call it correctly. It covers status categories, failure reasons, and token movement reporting, leaving no critical gap for this read-only lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one required parameter with 100% schema description coverage, and the schema documents the hash format and pattern. The description says the tool reports on a transaction but does not add hash-specific semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it reports what a sent Base transaction did. It also enumerates the outcomes and returned data, making the tool's purpose clear. It does not explicitly distinguish itself from the sibling get_receipt tool, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'sent Base transaction' implies a post-send status check, and the listed statuses clarify the expected context. However, there is no explicit guidance on when to use this tool versus alternatives such as get_receipt, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_treasury_stateA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
metaNo
basketYesAssets in the basket with base and dynamic weights.
nav_usdYesNet asset value of one GBLIN share in USD.
auction_openYesTrue while a rebalancing auction is running.
nav_reliableYesFalse when a price feed is stale or a basket asset cannot be read; do not trade on the NAV then.
eth_price_usdYesETH price in USD from the oracle.
slippage_reasonNo
crash_shield_activeYesTrue when the crash shield has cut the weight of a falling asset.
slippage_buffer_pctNo
management_fee_bps_per_yearYesManagement fee in basis points per year, read from the contract.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds one genuinely useful detail beyond that: 'whether the NAV is reliable', signaling that the returned NAV can be stale or untrustworthy. It stops short of saying why the NAV might be unreliable or whether the read is live on-chain vs cached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and scope first, followed by the concrete data points returned. No filler, no restatement of the tool name, every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be re-explained, and annotations carry the safety profile; the description's enumeration of state components is sufficient to decide to call it. Minor gap: freshness/latency and what makes the NAV unreliable flag flip are not addressed, which matters for a live-state read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description correctly avoids inventing input discussion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Reads') and resource ('current GBLIN protocol state on Base mainnet') and enumerates the returned fields: NAV in USD, basket composition with dynamic weights, Crash Shield status, NAV reliability. However, it never distinguishes itself from close siblings like analyze_treasury_health and get_nav_history, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. With overlapping siblings (analyze_treasury_health, get_nav_history, get_auction_state) present, the description gives the agent nothing to route on beyond the tool's own subject matter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

how_to_seal_paidA
Read-onlyIdempotent
Inspect

Returns the reference for unlimited paid seals (0.0045 USDC per seal via x402 on Base) in GBLIN's AI Action Receipts transparency log: endpoint, body schema, payment flow, and offline verification of receipts. The free demo allows 5 seals per day per IP.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
flowYes
noteNo
priceYes
receiptNo
endpointYes
read_freeNo
body_schemaNo
verify_offlineNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-derivable context: this is documentation, not an action, and the paid path costs 0.0045 USDC per seal via x402 on Base with offline verification available. It stops short of saying whether the returned reference is static or whether calling it has any side effects/costs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the return value and its contents, followed by the tier contrast. The parenthetical pricing detail earns its place. Slight density in the first sentence (a five-item list plus chain and protocol) but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no prose explanation, and with zero parameters there is no input burden. For a read-only reference endpoint, stating what the reference covers plus pricing and the free-tier boundary is sufficient to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly does not waste words on nonexistent inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Returns the reference for unlimited paid seals') and then enumerates exactly what that reference contains: endpoint, body schema, payment flow, offline verification. The pricing line (0.0045 USDC via x402 on Base) and the free-demo contrast make it distinguishable from seal_action_demo without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence about the free demo (5 seals/day per IP) gives the agent the implicit trigger for using this tool: when the free tier is insufficient. However, it never explicitly states the alternative ('use seal_action_demo for free trials') nor does it point at the payment siblings (prepare_gblin_payment, relay_gblin_payment, verify_gblin_authorization) that the described payment flow must involve.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invest_usdc_to_gblinA
Read-onlyIdempotent
Inspect

Returns calldata that converts a USDC amount into GBLIN, a basket of cbBTC, WETH and USDC minted at NAV and redeemable at any time. Two steps: (1) approve USDC to the GBLIN Zap, (2) GBLINZap.buyGBLINWithToken, which swaps the USDC to WETH on Uniswap V3 and mints at NAV with a non-zero minimum output. Free. The mint fee and the yearly management fee are governance parameters read live from the vault, not fixed in this text.

NameRequiredDescriptionDefault
usdc_amountYesUSDC amount to invest (decimal string).
wallet_addressYesUser's wallet address that holds the USDC and signs the transactions.

Output Schema

NameRequiredDescription
stepsYesTransactions to send in order.
actionYesAlways sequential_txs: send the steps one after the other.
expectedYesShares expected and the minimum applied.
gas_hintYesGas limit to set on the Zap step.
securityNo
gas_hint_noteNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description is fully consistent, saying the tool returns calldata rather than executing. Beyond the annotations it adds real value: the Uniswap V3 swap-to-WETH route, the non-zero minimum output safeguard, and the warning that mint and management fees are governance parameters read live rather than fixed. It stops short of covering failure modes or approval-amount semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core function is front-loaded in the first sentence, followed by the two-step mechanics and fee caveat. Four sentences with minimal waste, though the parenthetical basket definition and the fee disclaimer could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Given that, the description covers everything an agent needs: what is produced, the two-step execution path, the swap venue, slippage protection, and the fact that fees are dynamic governance parameters. Nothing material is missing for a two-parameter read-only calldata builder.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented and the baseline of 3 applies. The description adds only marginal context — that the USDC is swapped and the wallet is the signer — but does not clarify decimal precision, whether the amount is in base units, or approval-amount relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource — returns calldata converting USDC to GBLIN — and defines what GBLIN is (a basket of cbBTC, WETH, USDC). It clearly separates this from a plain swap by describing the NAV mint mechanism. It does not, however, distinguish itself from the reverse-direction sibling swap_gblin_to_usdc_jit, leaving that inference to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a useful procedural breakdown (approve USDC, then call buyGBLINWithToken), which tells the agent how the returned calldata is meant to be used. But there is no explicit statement of when to prefer this over quote_safe_swap, preview_steps, or prepare_gblin_payment, and no exclusions or prerequisites. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_treasuryA
Read-onlyIdempotent
Inspect

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), not cash and not yield.

NameRequiredDescriptionDefault
daysNoDays of spend to keep liquid (default 7, max 365).
trial_usdcNoTrial amount to simulate beside the surplus (default 100).
reserve_usdNoUSD to keep liquid regardless of the burn rate; the larger of the two rules wins.
daily_burn_usdNoAverage daily spend in USD. Operating cash = daily_burn_usd × days.
wallet_addressYesAgent's 0x address.

Output Schema

NameRequiredDescription
nextYesThe tools to call after a human confirms.
as_ofNoBlock and time the reads were taken at.
notesNo
trialYesThe same simulation for the trial amount.
inputsNoThe inputs as applied, with the defaults filled in.
marketYesNAV, ETH price, risk regime and crash shield status.
walletYes
surplusYesUSDC above the operating cash.
blockersYesReasons parking is not appropriate right now, if any.
simulationYesMint simulation for the surplus: shares, fees, exit value today, round-trip cost; or nothing_to_park.
wallet_stateYesUSDC, GBLIN and ETH balances, gas health, redemption cooldown.
operating_cashYesUSDC to keep liquid: max(reserve_usd, daily_burn_usd × days), with the runway in days.
park_candidateYesTrue when no blocker applies. Not a recommendation.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it gives the operating-cash formula, names the simulation components (vault-live fees, estimated exit value, round-trip cost), and lists concrete blockers (Crash Shield, redemption cooldown, ETH for the exit). Annotations only say readOnly/idempotent; the description adds the mechanics an agent needs, plus a risk disclaimer that GBLIN is crypto exposure, not cash or yield.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and result, and every clause carries information - formula, simulation contents, blockers, read-only status, risk caveat. However it is one dense, run-on sentence of roughly 80 words; splitting it into two or three would aid scanning without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, open-world planning tool with an output schema and full annotation coverage, this is complete: it says what is computed, what the plan contains, what can block it, and that nothing executes or is advised. Return-value shape is covered by the output schema, so no further detail is owed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds the derivation the schema cannot express: operating cash = max(reserve_usd, daily_burn_usd x days), which explains how the two optional params interact and which wins. It also restates the trial-amount default. Incremental value over the schema is real, though modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('turns idle USDC into a reviewable plan in one call') and enumerates the plan's contents, so the agent knows exactly what it gets back. The closing contrast with execution tools ('nothing is executed') separates it from invest_usdc_to_gblin and swap_gblin_to_usdc_jit without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'reviewable plan' plus 'read-only, nothing executed' signals this is the pre-flight step before an execution sibling, but no sibling is named as the alternative. There is also no explicit statement of when not to use it (e.g. for wallets with no USDC, or when only a quote is wanted).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_actionA
Read-onlyIdempotent
Inspect

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 output bound is non-zero and every step through the vault or the Zap carries its gas limit. Nothing is signed or sent: the steps are returned to the caller.

NameRequiredDescriptionDefault
rowNobid only: the basket row to bid on. Default: the row with the largest gap.
actionYesThe operation to prepare.
amountNoDecimal amount. Unit depends on the action (see the description). Not used by bid.
wallet_addressYesThe wallet that will sign and receive.

Output Schema

NameRequiredDescription
nextNo
stepsYesTransactions to send in order.
actionYes
walletNo
expectedNoWhat the operation should deliver, with the minimums applied.
warningsNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive; the description reinforces and extends this by confirming nothing is signed or sent. It adds real behavioral context beyond annotations: transaction ordering, gas limits embedded in each step, non-zero output bounds, and the Zap routing details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then per-action semantics, then the safety guarantee. Dense but nearly every clause carries information; the parenthetical chains are slightly heavy but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description still says steps are returned. For a multi-action builder of unsigned transactions this is close to complete; only prerequisite context (e.g., token approvals before minting) is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; however the description genuinely adds value by defining the unit of `amount` per action (ETH, WETH, USDC, shares, or the USDC needed) and confirming `row` is bid-only with a largest-gap default, which goes beyond the schema's generic wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Builds the unsigned transactions for an operation on the GBLIN vault') and enumerates all seven actions with their units. It does not explicitly name a sibling, but the enumeration and the 'unsigned, nothing signed or sent' framing make the scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'the steps are returned to the caller' hints that this is a preparation step to be followed by signing, and per-action notes ('exit_to_eth ... all or nothing', 'amount = the USDC needed') narrow inputs. No explicit when-to-use/when-not or comparison to alternatives such as preview_steps, seal_action_demo, or quote_safe_swap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_gblin_paymentA
Read-only
Inspect

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 'transfer' suits an x402 facilitator, which submits on the seller's behalf. With relay: true it also returns a second authorization that pays a relayer's fee in GBLIN. No private key is requested, held or transmitted: the signature is produced by the caller's own wallet.

NameRequiredDescriptionDefault
toYesThe recipient's address.
fromYesThe payer's address: the wallet that will sign.
relayNotrue 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'.
methodNo'receive' (default) can be submitted only by the recipient; 'transfer' by anyone.
amount_usdNoAmount in USD, converted at the live NAV. Give this or amount_gblin.
amount_gblinNoAmount in GBLIN shares, e.g. '0.25'. Give this or amount_usd.
valid_for_secondsNoHow long the authorization stays valid. Default 600, maximum 86400.

Output Schema

NameRequiredDescription
relayNoWith relay: true, the fee authorization to sign and where to send both.
amountNo
digestYesThe EIP-712 digest of typed_data.
methodYes
submitNo
warningsNo
next_stepsNo
typed_dataYesThe EIP-712 message to sign with eth_signTypedData_v4.
x402_payloadYesThe x402 exact-scheme payment payload, with the signature left to fill.
authorizationYesfrom, to, value, validAfter, validBefore, nonce.
payer_balanceNo
x402_accepts_for_sellersNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and the description is consistent: the tool only builds and returns messages, never submits or holds keys ('No private key is requested, held or transmitted'). It adds substantive context beyond annotations — EIP-3009/EIP-712 mechanics, domain read from the token rather than assumed, and relay forcing method 'transfer' — but does not discuss validity/expiry consequences or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it produces and why it matters, and each sentence carries new information (gaslessness, method choice, relay mode, key safety). It is dense and slightly long, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-artifact preparation tool with an output schema and full annotation coverage, the description covers inputs, modes, signing flow, and the no-key custody guarantee. Nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all seven parameters are already documented in the schema. The description reinforces method/relay semantics and the front-running rationale, but adds little that the schema does not already state (live NAV conversion, default 600s, forced 'transfer'), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Builds a gasless GBLIN payment') and immediately enumerates the three artifacts returned (EIP-712 message, calldata, x402 payload). It clarifies its role versus a submitting tool through the relay/method discussion, though it never names the actual siblings relay_gblin_payment or verify_gblin_authorization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit selection criteria among its own modes: 'receive' when only the recipient should submit (front-running protection), 'transfer' for an x402 facilitator, and 'relay: true' when nobody else will carry it on chain. It lacks routing guidance against the sibling submit/verify tools, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_stepsA
Read-onlyIdempotent
Inspect

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 for the wallet. State can change before transactions land: a successful preview is evidence, not a guarantee.

NameRequiredDescriptionDefault
fromYesThe wallet that will send the steps.
stepsYesThe steps, in order: target and calldata (or their send_calls spellings, to and data), value in wei (optional), gas (optional).

Output Schema

NameRequiredDescription
fromNo
noteNo
blockNoThe block the simulation ran on.
stepsYesPer step: success, gas used, whether the given limit is enough, recommended limit, revert reason.
would_succeedYesTrue only if every step succeeds in the simulation.
balance_changesYesNet token and ETH movements for the wallet.
first_failing_stepNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnly/idempotent/openWorld, and the description goes well beyond them: it explains the sequential state model, the exact per-step outputs (success, gas used, gas-limit sufficiency, decoded revert reason) plus net token/ETH movement, and warns that chain state can change so a preview is not a guarantee.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core simulation behavior and followed by input spelling and output shape. Dense but nearly every clause carries information; the parenthetical approval-before-mint example slightly pads an already-clear point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description still summarizes return shape and explicitly flags the non-determinism caveat, which structured fields cannot convey. For a read-only simulation tool with 2 fully documented parameters, nothing needed to invoke or interpret it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds the alias contract (target or to, calldata or data), the optionality of value and gas, and that value is denominated in wei. It does not mention the 8-step maximum enforced by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — simulate a sequence of transactions against the latest Base block — plus sequencing semantics ('each step sees the state the previous ones left'). This clearly separates it from sibling write/prepare tools like prepare_action and get_transaction_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'before anything is signed' establishes the pre-signing context and the caveat that a successful preview is evidence, not a guarantee. It does not explicitly name which sibling to use instead (e.g. prepare_action for construction, get_transaction_status for post-send), so alternatives are left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quote_safe_swapA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
amount_inYesPositive decimal. ETH for buy, GBLIN for sell.
directionYes

Output Schema

NameRequiredDescription
feesNo
directionYes
next_stepYes
amount_in_ethNoBuy only.
cooldown_noteNo
amount_in_gblinNoSell only.
slippage_reasonNo
expected_eth_outNoSell only.
safe_min_eth_outNoSell only. Pass as minEthOut.
expected_gblin_outNoBuy only.
safe_min_gblin_outNoBuy only. Pass as minOut.
slippage_buffer_bpsYes
will_revert_with_zero_toleranceNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the dynamic slippage buffer (2.5% normal / 4% during Crash Shield) and the fee breakdown returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the core purpose and return values. Every sentence adds information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained in full, yet the description still summarizes them. Annotations cover safety, and the description adds the slippage and fee context, leaving no critical gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: amount_in has a description, but direction has only an enum. The description compensates by mapping buy to ETH→GBLIN and sell to GBLIN→ETH, clarifying the missing half of the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (preview) and resource (buy/sell ETH↔GBLIN), and explicitly distinguishes from execution with 'without executing'. An agent can tell this is a read-only quote tool separate from swap execution siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without executing' implies the tool is for previewing before a swap, but it does not name any alternative tool or state when not to use it. No explicit routing to siblings like swap_gblin_to_usdc_jit or preview_steps is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

relay_gblin_paymentA
DestructiveIdempotent
Inspect

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 signed.

NameRequiredDescriptionDefault
feeYes{ authorization, signature } of the relay fee, as prepared with relay: true and signed by the payer.
paymentYes{ authorization, signature } of the payment, method 'transfer'.

Output Schema

NameRequiredDescription
feeNo
noteNo
blockNo
relayYesThe relay that carried the payment.
statusYes
paymentNo
explorerNo
transactionYesThe transaction hash.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavior beyond annotations: on-chain verification and simulation before submission, Multicall3 atomicity ('either both settle or neither does'), fee conversion at live NAV, and the explicit 'this tool moves funds' warning. It does not cover failure/revert handling or rate limits, but the destructive/idempotent/openWorld profile is already carried by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then mechanics, then the fund-movement warning. Nearly every sentence earns its place; the 'Returns the transaction hash and its outcome' line is partly redundant given the output schema, and the Multicall3 name is detail most agents don't need.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a fund-moving tool with nested objects, the description supplies atomicity, fee pricing, and prerequisite signatures, while annotations cover the safety profile and the output schema covers returns. What's missing is what happens on failed simulation/verification and whether re-submitting the same signed authorization is safe despite idempotentHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds meaning the schema does not: both structures are signed by the payer's wallet, and the fee is denominated in GBLIN priced at the live NAV. The distinction between payment and fee semantics comes through even though the nested 'authorization' object itself stays opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('carries a signed GBLIN payment on chain') plus the distinguishing scope condition ('for a payer that holds no ETH'). An agent can separate this from prepare_gblin_payment or verify_gblin_authorization without opening the schema, since this is the tool that actually submits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: the payer must hold no ETH and the authorizations must already be signed, with the fee 'prepared with relay: true' noted only in the schema. No explicit when-not condition or named alternative (e.g., prepare_gblin_payment as the prerequisite step) is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

seal_action_demoAInspect

Seals the hashes of an AI action into GBLIN's public append-only RFC 6962 transparency log (free demo, 5 per day per IP, receipt marked demo: true). Returns a portable receipt: Ed25519 signature, Merkle inclusion proof and operator-signed C2SP checkpoint, verifiable offline with the zero-dependency verify-receipt.mjs. Input and output go in as sha256 hashes only; the action label and metadata are published in the public log. Unlimited sealing is a separate paid x402 HTTP endpoint (0.0045 USDC per seal).

NameRequiredDescriptionDefault
metaNoOptional public metadata (published).
toolNoOptional name of the tool/model that produced the action (published).
actionYesShort public label of the action, e.g. 'trade.executed' or 'report.generated'. Published in the log — never put secrets here.
agent_idNoOptional public identifier of the agent (published in the log).
input_hashYessha256 of the action input, as 64 lowercase hex chars. Hash locally; never send content.
output_hashNoOptional sha256 of the action output (64 lowercase hex chars).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations, which only declare non-read-only, open-world, non-idempotent. The description adds the rate limit (5/day/IP), that receipts are marked demo:true, that the action label and metadata become public and permanent, and precisely what the receipt contains (Ed25519 signature, Merkle inclusion proof, C2SP checkpoint, offline verification via verify-receipt.mjs). That is exactly the context a caller needs before publishing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the operation and its target log, then layers limits, return value, and the paid alternative in a compact block. Dense but every clause (demo quota, demo:true marking, public visibility, receipt components) carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description fully describes the return value and its offline verification path. For a write tool that publishes to a public log, it covers quota, permanence, receipt shape, and the paid escalation path — nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already carries the parameter definitions. The description still adds meaningful semantics beyond it: only sha256 hashes go in, content must be hashed locally, while action label and metadata are published. That reinforces the privacy contract of each parameter rather than restating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Seals') and resource ('hashes of an AI action into GBLIN's public append-only RFC 6962 transparency log'), scoping exactly what is written and where. An agent can distinguish this from prepare_action or how_to_seal_paid without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for when to call: free demo limited to 5 per day per IP, with a pointer that unlimited sealing lives at the separate paid x402 endpoint. It also warns that label and metadata are published publicly, which steers callers away from this tool for sensitive content. It does not explicitly compare against the sibling how_to_seal_paid or prepare_action, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

share_skill_with_peerA
Read-onlyIdempotent
Inspect

Generates a portable skill seed that another AI agent can use to install the GBLIN MCP server. The seed includes a working transaction example, install instructions, and a referral code derived from the caller's wallet. The code is a label inside the seed only: it is not written into any transaction and no fee is paid for it.

NameRequiredDescriptionDefault
peer_contextNoOptional brief description of the peer agent's use case (e.g. 'yield farming bot', 'x402 payment agent', 'NFT marketplace'). Used to customize the example transaction in the seed.
caller_walletYesEVM address of the caller agent's wallet (the agent currently using GBLIN MCP). Will be hashed into the referral code.
example_amount_usdcNoOptional USDC amount to use in the example transaction within the seed. Default: 5. Range: 1-100.

Output Schema

NameRequiredDescription
textYesA ready-to-send description of the GBLIN skill.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, so the description's value-add is the explicit disclaimer that the referral code is a label only, not embedded in any transaction, and no fee is paid. That preempts a plausible misuse assumption. It does not say whether the seed is freshly regenerated per call, which is why it isn't a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste: what is generated is front-loaded, then contents, then the fee/label caveat. The negative clarification earns its place by preventing a misunderstanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape needn't be explained, and the generation plus referral-code semantics are covered. Minor gap: nothing says whether the seed targets a specific peer or is generic beyond peer_context customization, though the schema largely carries that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents peer_context, caller_wallet (hashed into the referral code), and example_amount_usdc with default and range. The description reinforces caller_wallet's role but adds no new syntax or format detail beyond structured fields, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact: 'Generates a portable skill seed' for installing the GBLIN MCP server. This is unmistakably different from every sibling tool (swaps, treasury, payments, receipts), so an agent can route to it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The name and description imply the use case (onboarding a peer agent), but there is no explicit statement of when to call this versus alternatives, nor any exclusion. Usage is inferred rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swap_gblin_to_usdc_jitA
Read-onlyIdempotent
Inspect

Returns ready-to-broadcast calldata that redeems exactly the USDC requested from a GBLIN position, just in time for an x402 invoice or any other USDC obligation. Three sequential transactions: (1) approve the shares to the GBLIN Zap, (2) GBLINZap.sellGBLINForEth, which redeems in kind and sells every leg for ETH, all or nothing, (3) a Uniswap WETH->USDC swap that spends only the guaranteed ETH minimum and still returns at least the requested USDC. EOAs sign three times; ERC-4337 and EIP-7702 wallets can batch them into one operation. Every step carries a non-zero minimum; ETH above the minimum stays in the wallet. Free. A redemption carries no protocol fee; the costs are the Zap's swaps and gas.

NameRequiredDescriptionDefault
usdc_neededYesUSDC amount, decimal string.
wallet_addressYesAgent's 0x address (for cooldown check).

Output Schema

NameRequiredDescription
stepsYesTransactions to send in order.
actionYesAlways sequential_txs: send the steps one after the other.
paramsNo
expectedYesShares spent, ETH and USDC expected, and the minimums applied.
gas_hintYesGas limit to set on the Zap step.
compatibilityNo
gas_hint_noteNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Extremely rich disclosure beyond annotations: the three sequential transactions, all-or-nothing redemption, non-zero minimum per step, ETH above minimum stays in the wallet, EOA vs ERC-4337/EIP-7702 signing behavior, and that it is free of protocol fee with costs limited to Zap swaps and gas. Returning calldata is consistent with readOnlyHint=true, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, then the mechanism, batching, minimums and cost are layered efficiently. It is dense for a single paragraph but nearly every clause carries decision-relevant information; minor trimming of the mechanism detail could tighten it further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-transaction calldata builder with an output schema covering return values, the description supplies everything needed to call correctly: what it produces, the step sequence, batching behavior, slippage/minimum guarantees, and cost profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are self-documented, so the schema carries the load. The description adds the sub-meaning that usdc_needed is the exact amount that will be guaranteed out and wallet_address drives a cooldown check, but does not add format detail beyond the schema. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: returns ready-to-broadcast calldata that redeems exactly the requested USDC from a GBLIN position. The JIT-for-x402 framing plus the explicit three-step mechanism makes the operation unambiguous and distinguishable from generic payment-prep tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete context: use when you need USDC to cover an x402 invoice or any USDC obligation against a GBLIN position. It stops short of naming an explicit alternative (e.g., prepare_gblin_payment) or a when-not condition, so a 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_gblin_authorizationA
Read-onlyIdempotent
Inspect

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 facilitator runs, so a 'would_settle' verdict means the payment can be carried.

NameRequiredDescriptionDefault
methodNoWhich method the signature was produced for. Default 'receive'.
signatureYesThe signature produced by the payer's wallet, 0x-prefixed.
authorizationYesThe authorization object: from, to, value, validAfter, validBefore, nonce.

Output Schema

NameRequiredDescription
amountNo
checksYes
digestNo
methodYes
sourceNo
submitNoCalldata and who may submit it, or null when it would not settle.
failuresYesReasons it would not settle; empty when it would.
would_settleYesTrue only if the token would accept this authorization now.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations, which only declare read-only, idempotent, non-destructive, open-world. It enumerates the exact checks (EIP-712 signer recovery, ERC-1271 for contract payers, validity window vs on-chain time, nonce used/cancelled, payer balance) and the two possible outcomes: ready calldata or failing reason. That tells the agent its network-dependency and failure behavior concretely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and then the checks, with the outcome stated last; every sentence carries information. It is somewhat dense for three sentences, but nothing is redundant with the annotations or the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a complex, nested-input verification tool. With an output schema present, the description need not detail return values, yet it still signals a verdict plus calldata or a failing reason, and it covers the cross-cutting concerns (contract payers, on-chain time, nonce state) that make the tool's result interpretable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema documents all three parameters, including the method enum default, so the baseline of 3 applies. The description adds domain meaning (signature is verified by signer recovery, ERC-1271 fallback for contract payers) but does not explain the receive/transfer method distinction or the authorization object fields beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (checks a signed GBLIN authorization) plus the decisive scope detail: before any gas is spent. This distinguishes it from the sibling prepare_gblin_payment and relay_gblin_payment as a read-only pre-flight check rather than an action that submits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear situational context ('before any gas is spent on it') and frames the verdict against what an x402 facilitator checks, so the agent knows when to reach for it. It stops short of naming explicit alternatives or exclusions, e.g., when to use prepare_gblin_payment or relay_gblin_payment instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_risk_attestationA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
attestationYesThe 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_attestorNoOptional 0x address to check the signature against. Defaults to the GBLIN attestor address baked into this MCP build (GBLIN_ATTESTOR_ADDRESS env).

Output Schema

NameRequiredDescription
liveNo
validYesTrue only if every check passed.
checksYesEach check by name, with its result.
sourceNo
attestedNo
guidanceNo
recomputed_attestation_idNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it discloses that the call is free, enumerates the four concrete checks performed (EIP-712 recomputation, signer recovery against GBLIN's published attestor, 10-minute freshness against on-chain time, live regime drift). It also clarifies conditional behavior — signature recovery only applies 'when a signature is present'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and cost in the first clause, then spends the remainder on a compact numbered list of checks. No filler sentences; every phrase either scopes the input or names a verification step.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter verification tool with an output schema already present, the description supplies everything an agent needs: accepted input shapes, cost, what is being checked, and the time-validity window. Return-value formatting is correctly left to the output schema rather than duplicated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic nuance: it clarifies that attestation_id, signature and attestor are consumed only when present, and it frames the expected_attestor parameter as a comparison target rather than a mere input. It stops short of explaining what a mismatch on expected_attestor produces, but the conditional-usage semantics are materially clearer than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (verifies) and a specific resource (GBLIN Risk Attestation), and enumerates the three accepted input forms (the /api/x402/attestation object or a peer-attached proof-of-diligence). The resource is clearly distinct from the sibling verify_gblin_authorization, so an agent can select between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage by describing accepted inputs and stating 'Free', which tells the agent there is no cost barrier to calling it. However, it never says when to prefer this over verify_gblin_authorization, nor does it state when verification is unnecessary or what to do on failure — usage is inferred rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.6.4
    • Changedprepare_gblin_payment1 field changed
      • changedInput schema / properties / relay / description
        Previous value: -"true when nobody else will carry the payment on chain: also prepares the relay fee authorization, paid in GBLIN at the live NAV, for relay_gblin_payment. Forces method 'transfer'."New value: +"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'."
    • Changedrelay_gblin_payment1 field changed
      • changedInput schema / properties / fee / description
        Previous value: -"{ authorization, signature } of the relay fee, from prepare_gblin_payment's relay block."New value: +"{ authorization, signature } of the relay fee, as prepared with relay: true and signed by the payer."
  2. 21 tool updatesv1.1.5
    • Changedanalyze_treasury_health2 fields changed
      • addedInput schema / properties / _payment
        Added value: +{
        +  "description": "Base64-encoded x402 PaymentProof JSON. Omit on first call to receive the 402 payment manifest.",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "balances": {
        +      "type": "object"
        +    },
        +    "cooldown": {
        +      "description": "Whether the redemption cooldown is active and for how long.",
        +      "type": "object"
        +    },
        +    "gas_health": {
        +      "description": "Whether the wallet holds enough ETH for the next transactions.",
        +      "type": "object"
        +    },
        +    "ratios": {
        +      "type": "object"
        +    },
        +    "recommendation": {
        +      "description": "hold, rebalance_to_gblin or rebalance_to_usdc, with the reason.",
        +      "type": "object"
        +    },
        +    "wallet": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "wallet",
        +    "balances",
        +    "gas_health",
        +    "cooldown",
        +    "recommendation"
        +  ],
        +  "type": "object"
        +}
    • Addedget_auction_state
    • Changedget_governance_state2 fields changed
      • addedInput schema / required
        Added value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "fee_recipient": {
        +      "type": "string"
        +    },
        +    "lens": {
        +      "type": "string"
        +    },
        +    "owner": {
        +      "type": "string"
        +    },
        +    "owner_is_renounced": {
        +      "type": "boolean"
        +    },
        +    "owner_is_timelock": {
        +      "type": "boolean"
        +    },
        +    "pending_handover": {
        +      "description": "A pending ownership transfer, or null.",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "pending_timelock_operation": {
        +      "description": "A scheduled timelock operation affecting ownership, or null.",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "timelock": {
        +      "description": "Address and minimum delay of the timelock, read on chain.",
        +      "type": "object"
        +    },
        +    "trust_summary": {
        +      "type": "string"
        +    },
        +    "vault": {
        +      "type": "string"
        +    },
        +    "verification": {
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "vault",
        +    "owner",
        +    "owner_is_timelock",
        +    "owner_is_renounced",
        +    "timelock"
        +  ],
        +  "type": "object"
        +}
    • Addedget_market_risk_regime
    • Addedget_nav_history
    • Addedget_receipt
    • Addedget_transaction_status
    • Changedget_treasury_state2 fields changed
      • addedInput schema / required
        Added value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "auction_open": {
        +      "description": "True while a rebalancing auction is running.",
        +      "type": "boolean"
        +    },
        +    "basket": {
        +      "description": "Assets in the basket with base and dynamic weights.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "crash_shield_active": {
        +      "description": "True when the crash shield has cut the weight of a falling asset.",
        +      "type": "boolean"
        +    },
        +    "eth_price_usd": {
        +      "description": "ETH price in USD from the oracle.",
        +      "type": "number"
        +    },
        +    "management_fee_bps_per_year": {
        +      "description": "Management fee in basis points per year, read from the contract.",
        +      "type": "number"
        +    },
        +    "meta": {
        +      "type": "object"
        +    },
        +    "nav_reliable": {
        +      "description": "False when a price feed is stale or a basket asset cannot be read; do not trade on the NAV then.",
        +      "type": "boolean"
        +    },
        +    "nav_usd": {
        +      "description": "Net asset value of one GBLIN share in USD.",
        +      "type": "number"
        +    },
        +    "slippage_buffer_pct": {
        +      "type": "number"
        +    },
        +    "slippage_reason": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "nav_usd",
        +    "eth_price_usd",
        +    "nav_reliable",
        +    "management_fee_bps_per_year",
        +    "auction_open",
        +    "crash_shield_active",
        +    "basket"
        +  ],
        +  "type": "object"
        +}
    • Addedhow_to_seal_paid
    • Changedinvest_usdc_to_gblin3 fields changed
      • addedInput schema / properties / wallet_address
        Added value: +{
        +  "description": "User's wallet address that holds the USDC and signs the transactions.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "usdc_amount"
        -]New value: +[
        +  "usdc_amount",
        +  "wallet_address"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "action": {
        +      "description": "Always sequential_txs: send the steps one after the other.",
        +      "type": "string"
        +    },
        +    "expected": {
        +      "description": "Shares expected and the minimum applied.",
        +      "type": "object"
        +    },
        +    "gas_hint": {
        +      "description": "Gas limit to set on the Zap step.",
        +      "type": "number"
        +    },
        +    "gas_hint_note": {
        +      "type": "string"
        +    },
        +    "security": {
        +      "type": "object"
        +    },
        +    "steps": {
        +      "description": "Transactions to send in order.",
        +      "items": {
        +        "description": "One transaction to send, in order: target, calldata, value in wei, and gas when the step needs an explicit limit. The same call is repeated as to, data and chainId (8453) for wallet batch APIs such as send_calls.",
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "action",
        +    "steps",
        +    "expected",
        +    "gas_hint"
        +  ],
        +  "type": "object"
        +}
    • Addedplan_treasury
    • Addedprepare_action
    • Addedprepare_gblin_payment
    • Addedpreview_steps
    • Changedquote_safe_swap1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "amount_in_eth": {
        +      "description": "Buy only.",
        +      "type": "string"
        +    },
        +    "amount_in_gblin": {
        +      "description": "Sell only.",
        +      "type": "string"
        +    },
        +    "cooldown_note": {
        +      "type": "string"
        +    },
        +    "direction": {
        +      "enum": [
        +        "buy",
        +        "sell"
        +      ],
        +      "type": "string"
        +    },
        +    "expected_eth_out": {
        +      "description": "Sell only.",
        +      "type": "string"
        +    },
        +    "expected_gblin_out": {
        +      "description": "Buy only.",
        +      "type": "string"
        +    },
        +    "fees": {
        +      "type": "object"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "safe_min_eth_out": {
        +      "description": "Sell only. Pass as minEthOut.",
        +      "type": "string"
        +    },
        +    "safe_min_gblin_out": {
        +      "description": "Buy only. Pass as minOut.",
        +      "type": "string"
        +    },
        +    "slippage_buffer_bps": {
        +      "type": "number"
        +    },
        +    "slippage_reason": {
        +      "type": "string"
        +    },
        +    "will_revert_with_zero_tolerance": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "direction",
        +    "slippage_buffer_bps",
        +    "next_step"
        +  ],
        +  "type": "object"
        +}
    • Addedrelay_gblin_payment
    • Addedseal_action_demo
    • Addedshare_skill_with_peer
    • Changedswap_gblin_to_usdc_jit1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "action": {
        +      "description": "Always sequential_txs: send the steps one after the other.",
        +      "type": "string"
        +    },
        +    "compatibility": {
        +      "type": "object"
        +    },
        +    "expected": {
        +      "description": "Shares spent, ETH and USDC expected, and the minimums applied.",
        +      "type": "object"
        +    },
        +    "gas_hint": {
        +      "description": "Gas limit to set on the Zap step.",
        +      "type": "number"
        +    },
        +    "gas_hint_note": {
        +      "type": "string"
        +    },
        +    "params": {
        +      "type": "object"
        +    },
        +    "steps": {
        +      "description": "Transactions to send in order.",
        +      "items": {
        +        "description": "One transaction to send, in order: target, calldata, value in wei, and gas when the step needs an explicit limit. The same call is repeated as to, data and chainId (8453) for wallet batch APIs such as send_calls.",
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "action",
        +    "steps",
        +    "expected",
        +    "gas_hint"
        +  ],
        +  "type": "object"
        +}
    • Addedverify_gblin_authorization
    • Addedverify_risk_attestation
  3. 6 tool updatesv1.1.2
    • First observedanalyze_treasury_health
    • First observedget_governance_state
    • First observedget_treasury_state
    • First observedinvest_usdc_to_gblin
    • First observedquote_safe_swap
    • First observedswap_gblin_to_usdc_jit

TDQS

A3.8/5.0

Scored across 21 tools

Disambiguation3/5

The core read/prepare/simulate/verify split is clear, but several tools overlap: invest_usdc_to_gblin and swap_gblin_to_usdc_jit are essentially special cases of prepare_action's mint_with_usdc and exit_to_usdc, and quote_safe_swap overlaps both preview_steps and the mint/redeem previews. analyze_treasury_health and plan_treasury also both compute runway/surplus/blockers, so an agent can plausibly pick either for the same question. Descriptions do help disambiguate intent (convenience calldata vs. generic builder), which keeps this from scoring lower.

Naming Consistency4/5

Nearly all tools are snake_case and verb-led (get_*, prepare_*, verify_*, analyze_*, plan_*), with a readable get_/prepare_/verify_ role split. Deviations exist: how_to_seal_paid is a question rather than an action, and quote_safe_swap / swap_gblin_to_usdc_jit / relay_gblin_payment mix different verb-noun shapes. Still broadly predictable.

Tool Count3/5

21 tools sits in the heavy band for a protocol SDK surface, and a few earn their place only marginally: how_to_seal_paid is pure documentation, share_skill_with_peer is a referral helper, and the two convenience swap tools duplicate prepare_action paths. The domain genuinely spans vault ops, x402 payments, receipts, risk and governance, so the breadth is defensible, but the set could shed 3-5 tools without loss.

Completeness4/5

Coverage is strong end-to-end: state/history/governance reads, quotes, plan and prepare, step simulation, relay execution, and post-hoc transaction status, plus receipt sealing and offline-verifiable attestations. Gaps are minor: governance is read-only (no propose/execute/cancel timelock operations), receipts are fetch-by-index only with no enumeration, and signed authorizations can be verified but not cancelled. These are workaroundable rather than dead ends.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that provides real-time access to Chainlink's decentralized on-chain price feeds, optimized for seamless integration into AI agents and autonomous systems.
    5
    8 npm
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Manage Uniswap and Aerodrome liquidity positions with leverage, automated rebalancing, and yield optimization on Base and Unichain.
    38
    398 npm
    5
    AGPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    Eight crypto and DeFi data tools for AI agents: prices, gas, one ParaSwap route quote, GoPlus token security and top-holder samples, DefiLlama yields, Hyperliquid/dYdX funding, and observed wallet balances. Inspect prices free; pay 0.001–0.008 USDC per call on Base through x402. No API key or subscription.
    8
    135 npm
    MIT