Skip to main content
Glama
justlend

mcp-server-justlend

Official
by justlend

mcp-server-justlend

License: MIT TRON Network TypeScript MCP JustLend npm

A Model Context Protocol (MCP) server that enables AI agents to interact with the JustLend DAO lending protocol on TRON. Supply assets, borrow against collateral, manage positions, participate in V2 (Moolah) isolated markets and vaults, and analyze DeFi portfolios — all through a unified AI interface.

Beyond JustLend-specific operations, the server also exposes a full set of general-purpose TRON chain utilities — balance queries, block/transaction data, token metadata, TRX transfers, smart contract reads/writes, staking (Stake 2.0), multicall, and more.

Overview

JustLend DAO is the largest lending protocol on TRON. This MCP server wraps the full protocol functionality into tools and guided prompts that local MCP clients such as Claude Desktop, Codex, Claude Code, and Cursor can use.

📌 Current Version: v1.1.3 — JustLend V1 + V2 (Moolah), plus TRX↔WTRX wrap/unwrap

  • JustLend V1 (Compound V2 fork): the original pool-based protocol — jUSDT, jTRX, jUSDD, jSUN, jWBTC, etc. Full supply / borrow / repay / withdraw / collateral management and mining rewards.

  • JustLend V2 (Moolah) (Morpho Blue fork): isolated markets with MarketParams (loanToken, collateralToken, oracle, irm, lltv) and ERC4626 vaults that auto-allocate across markets. Full vault deposit / redeem, collateral supply / borrow / repay / liquidate, and public liquidations.

Key Capabilities

JustLend V1 (pool-based, Compound V2 fork)

  • Market Data: Real-time APYs, TVL, utilization rates, prices for all markets

    • Smart fallback: contract queries first, API fallback for reliability

    • TTL caching (30–60s) to reduce RPC calls

  • Account Data: Full position analysis via Multicall3 batch queries (~2.5s vs ~8s legacy)

    • Health factor, collateral, borrow positions

    • On-chain Oracle prices with API fallback

  • Batch Wallet Balances: Query all TRC20 token balances in a single Multicall3 RPC call

  • Mining Rewards: Advanced mining reward calculation (based on justlend-app logic)

    • Detailed breakdown by market and reward token (USDD, TRX, WBTC, etc.)

    • USD value calculation with live token prices

  • Supply / Borrow / Repay / Withdraw: Full lending operations with pre-flight checks

  • Collateral Management: Enter/exit markets, manage what counts as collateral

  • Portfolio Analysis: AI-guided risk assessment, health factor monitoring, optimization

  • JST Voting / Governance: View proposals, cast votes, deposit/withdraw JST for voting power, reclaim votes

  • Energy Rental + Direct Purchase: Rent energy on-chain, or query/quote/buy energy through the separately configured direct-purchase service

  • sTRX Staking: Stake TRX to receive sTRX, unstake sTRX, claim staking rewards, check withdrawal eligibility

    • Precision-safe BigInt/string math for TRX Sun conversion and 18-decimal sTRX balances/exchange-rate display

JustLend V2 — Moolah (New in v1.1.0)

  • ERC4626 Vaults (TRX / USDT / USDD on mainnet; TRX + USDT on nile): auto-compounding yield with a curator that allocates deposits across isolated markets. Deposit / withdraw (by asset amount or max) / redeem (by shares) with TRC20 approvals handled as a separate tool so LLMs can reason about each step.

  • Isolated Markets: each market is a (loanToken, collateralToken, oracle, irm, lltv) tuple. Supply collateral → borrow → repay → withdraw collateral, plus a composite moolah_borrow that handles collateral+borrow as two sequential txs. TRX routes through the TrxProviderProxy contract; TRC20 goes through MoolahProxy directly.

  • Public Liquidations: list undercollateralized positions (risk > 1.0), quote loan-token requirement for a target seize, execute liquidation. Includes an explicit approve_liquidator_token step.

  • Dashboard + History: aggregated user position, APY / TVL time-series for vaults and markets, paginated V2 transaction records.

  • Gas estimation: estimate_moolah_energy returns typical historical energy / bandwidth / TRX cost for every V2 write op.

Historical records (New in v1.1.0)

  • Paginated REST wrappers for V1 lending / sTRX / voting / energy-rental / liquidation history, plus V2 Moolah records. Each endpoint's numeric action/op codes are enriched with human-readable names (actionName / opName) client-side so MCP tools are self-describing.

Browser Wallet Signing

  • Disabled by default: the legacy tronlink-signer loopback bridge lacks request-level authentication

  • Safe current mode: use agent-wallet with AGENT_WALLET_PASSWORD; browser signing will return only after an authenticated bridge is available

General TRON Chain

  • Balances: TRX balance (with Sun/TRX conversion), TRC20/TRC1155 token balances

  • Blocks: Latest block, block by number/hash, block number, chain ID

  • Transactions: Fetch transaction details, receipts, wait for confirmation

  • Contracts: Read/write any contract, fetch on-chain ABI, multicall (v2 & v3), deploy, estimate energy

  • Token Metadata: TRC20 info (name/symbol/decimals/supply), TRC721 metadata, TRC1155 URI

  • Transfers: Send TRX, transfer TRC20 tokens, approve spenders

    • Transfer/approval paths validate recipient, token, and spender TRON addresses before signing

  • Staking (Stake 2.0): Freeze/unfreeze TRX for BANDWIDTH or ENERGY, withdraw expired unfreeze

  • Address Utilities: Hex ↔ Base58 conversion, address validation, resolution

  • Wallet: Sign messages and transactions through agent-wallet; the unauthenticated browser bridge is disabled

Related MCP server: Kaskad Protocol MCP Server

Supported Markets

JustLend V1 (pool-based)

The protocol currently exposes 18 active + 6 legacy = 24 markets. This roster was cross-checked against the expanded JustLend app market table and live /lend/jtoken API on 2026-08-19. Call get_supported_markets for the live list with addresses; the active markets are:

jToken

Underlying

Description

jTRX

TRX

Native TRON token

jUSDT

USDT

Tether USD

jUSDD

USDD

Decentralized USD (USDD/TRX supply‑mining rewards)

jUSD1

USD1

World Liberty Financial USD

jTUSD

TUSD

TrueUSD

jwstUSDT

wstUSDT

Wrapped staked USDT (yields underlying staking APY)

jsTRX

sTRX

Staked TRX (yields underlying staking APY)

jBTC

BTC

Bitcoin (wrapped)

jWBTC

WBTC

Wrapped Bitcoin

jETH

ETH

Ethereum — dApp UI displays as "ETH" (formerly "ETHOLD")

jETHB

ETHB

Bridged Ethereum — dApp UI displays as "ETHB" (formerly "ETH")

jSUN

SUN

SUN token

jJST

JST

JUST governance token

jWIN

WIN

WINkLink

jBTT

BTT

BitTorrent token

jNFT

NFT

APENFT

jHTX

HTX

HTX token

jU

U

U token

Paused / legacy markets (closed to new supply/borrow, queryable for read & to unwind positions): jUSDCOLD, jUSDD_OLD, jBUSDOLD, jSUNOLD, jUSDJ, jWBTT.

JustLend V2 (Moolah) — vaults

Vault

Underlying

Mainnet

Nile

TRX

native TRX

USDT

TRC20 USDT

✅ (different underlying address from mainnet)

USDD

TRC20 USDD

❌ (not deployed on nile)

Markets are not enumerated here because they are created dynamically on-chain; use get_moolah_markets to list them at runtime (each market returns a marketId / id plus loanSymbol / collateralSymbol / lltv / rates).

Prerequisites

Installation

git clone https://github.com/justlend/mcp-server-justlend.git
cd mcp-server-justlend
npm install

Quick Setup

For a guided setup experience (build, configure, generate .mcp.json, print Codex setup command):

bash scripts/setup-mcp-test.sh
# Add --claude-desktop to also print Claude Desktop JSON

The script checks Node.js 20+, installs dependencies, builds the project, generates local Claude Code config, and prints the local Codex registration command.

Configuration

Wallet Setup (First-Use Choice)

On first use, select agent mode via set_wallet_mode with mode="agent". Browser mode is disabled until its local bridge supports request-level authentication.

The encrypted wallet is stored in ~/.agent-wallet/. Configure AGENT_WALLET_PASSWORD so its encryption password is not persisted beside the wallet data.

You can also manage wallets via CLI or MCP tools:

CLI (agent-wallet)

# Import an existing private key or mnemonic
npx agent-wallet add

# Generate a new wallet
npx agent-wallet generate

# List all wallets
npx agent-wallet list

# Switch active wallet
npx agent-wallet activate <wallet-id>

MCP Tools (runtime)

Tool

Description

get_wallet_address

Shows current address, or returns first-use wallet selection guidance

connect_browser_wallet

Returns a safety notice while the unauthenticated browser bridge is disabled

set_wallet_mode

Select supported agent signing (browser currently returns an error)

get_wallet_mode

Show current signing mode and addresses

list_wallets

List all wallets with IDs, types, addresses

set_active_wallet

Switch active wallet by ID

Importing an existing private key is intentionally not exposed as an MCP tool because MCP arguments can be logged by clients and transports. Use the CLI instead:

npx agent-wallet import
# (Optional) For automated/CI setups, set the wallet password
export AGENT_WALLET_PASSWORD="your_wallet_password"

# Strongly recommended — avoids TronGrid 429 rate limiting on mainnet
export TRONGRID_API_KEY="your_trongrid_api_key"

Energy direct-purchase API

Direct purchase uses the official production endpoint from the app release by default: https://tegrow.ablesdxd.link. Limits, durations, prices, payment address, and pool capacity are still loaded live; no economic values are hard-coded. Set JUSTLEND_ENERGY_API_URL only to override the production service. Custom/test endpoints require an explicit trust opt-in:

export JUSTLEND_ENERGY_API_URL="https://energy-api.example" # optional override
export JUSTLEND_ALLOW_UNTRUSTED_HOSTS=1 # temporary/custom endpoints only

Recommended tool sequence:

  1. get_energy_purchase_config — load live limits, durations, prices, and pool capacity.

  2. quote_energy_purchase — obtain an authoritative read-only quote.

  3. Show the exact payer, receivers, duration, and TRX amount to the user.

  4. buy_energy_direct — set confirmPayment=true only after explicit user confirmation.

  5. get_energy_purchase_order — track a token-bearing result.

  6. get_energy_purchase_history — recover accepted/in-progress orders by payer when a retry has no token.

  7. get_energy_payment_risk — reconcile any remaining ambiguous payment before signing again.

The server signs the native TRX payment but never broadcasts it locally. The configured backend validates and may broadcast the signed transaction. Ambiguous submissions retry only the same signed transaction. For ambiguous submissions, the exact signed request (including the signature and raw transaction) is stored locally with 0600 permissions under ~/.mcp-server-justlend/energy-payment-risks.json. It remains broadcastable until transaction expiry, is redacted from MCP output, and is removed only after public purchase history confirms the payment/order or the backend deterministically rejects it before broadcast. Use get_energy_payment_risk before any new payment when a previous result is uncertain. Risk reconciliation reports chainStatus as observed/included from FullNode first and solidified only after SolidityNode finality; RPC errors or a missing transaction never authorize a newly signed payment.

Client Configuration

Build the local server first:

npm run build

All local client examples below use the built stdio entrypoint:

node /absolute/path/to/mcp-server-justlend/build/index.js

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "justlend": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-justlend/build/index.js"],
      "env": {
        "TRONGRID_API_KEY": "SET_VIA_SYSTEM_ENV"
      }
    }
  }
}

Codex

Recommended: register the local stdio server with codex mcp add:

codex mcp add justlend --env TRONGRID_API_KEY=your_trongrid_api_key -- \
  node /absolute/path/to/mcp-server-justlend/build/index.js

If you do not want to set a TronGrid key yet, omit the --env flag:

codex mcp add justlend -- node /absolute/path/to/mcp-server-justlend/build/index.js

Useful maintenance commands:

codex mcp list
codex mcp get justlend
codex mcp remove justlend

Claude Code

Add to .mcp.json in the project root:

{
  "mcpServers": {
    "justlend": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-justlend/build/index.js"],
      "env": {
        "TRONGRID_API_KEY": "SET_VIA_SYSTEM_ENV"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "justlend": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-justlend/build/index.js"],
      "env": {
        "TRONGRID_API_KEY": "SET_VIA_SYSTEM_ENV"
      }
    }
  }
}

Usage

The server supports two transport modes. Both share the same Tools, Resources, and wallet initialization — the difference is how clients connect.

Stdio Mode (Local AI Clients)

npm start

The server communicates via stdin/stdout. This is the standard mode for local MCP clients like Claude Desktop, Codex, Claude Code, and Cursor, which launch the server as a child process.

HTTP/SSE Mode (Remote / Multi-Client)

MCP_API_KEY=my-secret-key npm run start:http

The server starts an Express HTTP service with Server-Sent Events (SSE) transport. Suitable for web applications, remote clients, or scenarios where multiple clients need to connect concurrently.

HTTP mode is fail-closed: MCP_API_KEY is required, the server binds to 127.0.0.1 by default, and CORS is disabled unless you explicitly set MCP_CORS_ORIGIN.

Endpoint

Method

Description

/sse

GET

SSE connection endpoint — returns a sessionId

/messages?sessionId=xxx

POST

Send MCP messages for a session

/health

GET

Health check (no auth required)

Environment variables:

Variable

Default

Description

PORT

3001

HTTP listen port

MCP_HOST

127.0.0.1

HTTP listen host. Keep the default unless you intentionally want remote exposure.

MCP_API_KEY

(required)

Bearer token for authentication. HTTP mode refuses to start without it.

MCP_CORS_ORIGIN

(disabled)

Allowed CORS origin. If unset, no CORS headers are sent.

MCP_MAX_SESSIONS

100

Maximum concurrent SSE sessions

MCP_SESSION_TIMEOUT_MS

1800000

Session idle timeout in ms (default: 30 min)

Example with authentication:

MCP_API_KEY=my-secret-key PORT=8080 npm run start:http
# Connect from client
curl -H "Authorization: Bearer my-secret-key" http://localhost:8080/sse

Development

npm run dev          # Stdio with auto-reload
npm run dev:http     # HTTP/SSE with auto-reload

API Reference

Machine-readable tool catalog for AI agents: mcp-api-list.md — a complete, offline-loadable list of every tool with its input schema (parameter / type / required / default), common output schema, MCP side-effect annotations (read-only vs. on-chain write / destructive) and HITL guidance. It is generated from source (npm run gen:api-list, see scripts/gen-mcp-api-list.ts) so it never drifts from the actual tool definitions. Agents can load it to plan tool routing without connecting to the server.

Structured output contract

All 104 tools declare an MCP outputSchema. Successful calls preserve the existing text content for older clients and also return a versioned envelope in structuredContent:

{
  "schemaVersion": "1.0.0",
  "tool": "get_supported_markets",
  "result": {}
}

Schema-aware clients should consume structuredContent; consumers should pin the schema major. Tool-specific payloads live under result. Error calls preserve isError: true and the existing JSON error body with errorCode, retryable, and hint when classified.

Tools (104 total)

The full, authoritative per-tool catalog — every tool's input and output schema, side-effect class (read-only / on-chain write / destructive) and HITL guidance — lives in mcp-api-list.md, generated from source (npm run gen:api-list) so it never drifts. Counts by category:

Category

Tools

Covers

Wallet & Network

10

wallet selection, signing mode (browser/agent), active wallet, network

Market Data

13

per-market & protocol APY/TVL/rates (contract query + API fallback)

Lending Operations

10

supply / borrow / repay / withdraw / collateral / approve (V1 jTokens)

JST Voting / Governance

10

proposals, vote status, WJST approve / vote / withdraw

Energy

15

rental dashboard and writes; direct-purchase config, quote, history, order/risk, confirmed buy

sTRX Staking

7

sTRX dashboard & account, stake / unstake / claim / withdraw

WTRX Wrap / Unwrap

2

wrap_trx (TRX→WTRX 1:1) / unwrap_trx (WTRX→TRX 1:1)

JustLend V2 (Moolah) — Vaults

6

ERC4626 vault read + deposit / withdraw / redeem / approve

JustLend V2 (Moolah) — Markets

8

isolated markets: supply-collateral / borrow / repay / approve

JustLend V2 (Moolah) — Liquidation

5

pending liquidations, quote, liquidate, approve

JustLend V2 (Moolah) — Dashboard & History

6

portfolio, positions, dashboard & history

JustLend V2 (Moolah) — Mining, Rewards & Estimator

5

mining APY / accrual, claim, gas estimate

Historical Records (V1 + airdrop) — mainnet-only

7

transaction / vote / reward history, claimable airdrops

Every write / destructive tool is marked destructiveHint: true and must be gated behind host-side human confirmation (HITL); see mcp-api-list.md for the exact per-tool side-effect class.

Architecture

mcp-server-justlend/
├── src/
│   ├── core/
│   │   ├── chains.ts          # Network configs + V1 jTokens + V2 Moolah addresses (mainnet + nile)
│   │   ├── abis.ts            # jToken, Comptroller, Oracle, TRC20 + 4 Moolah ABIs
│   │   ├── tools/             # MCP tool registrations (104 tools)
│   │   │   ├── index.ts                      # Barrel: registers all 13 tool modules with structured outputs
│   │   │   ├── wallet-tools.ts               # Wallet, network, transfer
│   │   │   ├── market-tools.ts               # V1 market data, balance, mining
│   │   │   ├── lending-tools.ts              # V1 supply / borrow / repay / collateral / approve / estimate
│   │   │   ├── voting-tools.ts               # V1 governance proposals & voting
│   │   │   ├── energy-tools.ts               # Energy rental + direct purchase
│   │   │   ├── staking-tools.ts              # sTRX staking
│   │   │   ├── wtrx-tools.ts                 # TRX ↔ WTRX
│   │   │   ├── moolah-vault-tools.ts         # V2 vault (6 tools)
│   │   │   ├── moolah-market-tools.ts        # V2 market (8 tools)
│   │   │   ├── moolah-liquidation-tools.ts   # V2 liquidation (5 tools)
│   │   │   ├── moolah-dashboard-tools.ts     # V2 dashboard + history + estimator (6 tools)
│   │   │   ├── moolah-mining-tools.ts        # V2 mining / rewards (5 tools)
│   │   │   ├── records-tools.ts              # V1 + airdrop records (7 tools, mainnet-only)
│   │   │   ├── structured-output.ts          # Common MCP outputSchema + structuredContent
│   │   │   └── shared.ts                     # Shared helpers
│   │   ├── prompts.ts         # AI-guided workflow prompts (14: 10 V1-era + 4 V2 Moolah)
│   │   ├── resources.ts       # Static protocol info resource
│   │   ├── browser-signer.ts  # fail-closed compatibility shim; legacy bridge disabled
│   │   └── services/
│   │       ├── # — Global + utilities —
│   │       ├── global.ts     # Global state: network, wallet mode
│   │       ├── clients.ts    # TronWeb client factory (cached)
│   │       ├── wallet.ts     # Wallet routing: browser / agent-wallet signing
│   │       ├── cache.ts      # TTL cache layer (30–60s) for prices, markets, sTRX
│   │       ├── http.ts       # fetchWithTimeout
│   │       ├── utils.ts      # toSun/fromSun, formatJson, hexToNumber, isAddress, …
│   │       ├── bigint-math.ts# BigInt helpers: divRound, formatPercentRatio, USD cent math
│   │       ├── resource-prices.ts # Energy / bandwidth prices in sun
│   │       ├── # — JustLend V1 —
│   │       ├── price.ts      # On-chain Oracle prices with API fallback
│   │       ├── markets.ts    # APY, TVL, utilization — contract + API fallback
│   │       ├── account.ts    # User positions via Multicall3 batch queries
│   │       ├── lending.ts    # V1 supply / borrow / repay / withdraw / collateral / estimator
│   │       ├── rewards.ts    # Mining reward calculation (USDD, TRX, WBTC)
│   │       ├── voting.ts     # JST governance: proposals, cast vote, deposit/withdraw WJST
│   │       ├── energy-rental.ts # Energy rental: query, calculate, rent, return
│   │       ├── energy-purchase.ts # Explicit API client, sign-only payment, idempotent submit, risk recovery
│   │       ├── strx-staking.ts  # sTRX staking: stake, unstake, rewards, withdrawal check
│   │       ├── records.ts    # V1 + cross-cutting paginated REST history + airdrop scan
│   │       ├── # — JustLend V2 (Moolah) —
│   │       ├── moolah-backend.ts    # REST wrapper for zenvora.ablesdxd.link
│   │       ├── moolah-query.ts      # On-chain view reads (market state, vault totalAssets, health, etc.)
│   │       ├── moolah-vault.ts      # Vault write ops (deposit / withdraw / redeem / approve)
│   │       ├── moolah-market.ts     # Market write ops (supply collateral / borrow / repay / composite)
│   │       ├── moolah-liquidation.ts# liquidate + approveLiquidatorToken
│   │       ├── moolah-dashboard.ts  # Aggregated dashboard + history helpers
│   │       ├── moolah-estimate.ts   # Typical energy / bandwidth for all V2 write ops
│   │       ├── # — General TRON chain —
│   │       ├── address.ts     # Hex ↔ Base58 conversion, validation
│   │       ├── balance.ts     # TRX balance (rich), TRC20/TRC1155 balances
│   │       ├── blocks.ts      # Block queries, block number, chain ID
│   │       ├── transactions.ts# getTransaction, getTransactionInfo, waitForTransaction
│   │       ├── transfer.ts    # transferTRX, transferTRC20, approveTRC20
│   │       ├── tokens.ts      # TRC20/TRC721/TRC1155 metadata
│   │       ├── contracts.ts   # readContract, writeContract, multicall, estimateEnergy + callValueToSafeNumber
│   │       ├── multicall-abi.ts # Multicall2 & Multicall3 ABIs
│   │       └── staking.ts     # Stake 2.0: freeze, unfreeze, withdrawExpireUnfreeze
│   ├── server/
│   │   ├── server.ts          # MCP server init
│   │   ├── http-server.ts     # Express HTTP/SSE transport (uses auth.ts for Bearer check)
│   │   └── auth.ts            # Constant-time Bearer-token comparison (crypto.timingSafeEqual)
│   └── index.ts               # Stdio entry point
├── bin/cli.js                 # CLI entry for npx
├── scripts/
│   └── setup-mcp-test.sh      # Quick setup: build + generate .mcp.json config
└── tests/
    └── core/
        ├── chains.test.ts
        └── services/
            ├── services.test.ts        # Client cache, legacy balance tests
            ├── address.test.ts         # Pure: address format conversion (16 tests)
            ├── utils.test.ts           # Pure: unit conversions, formatters (26 tests)
            ├── cache.test.ts           # Unit: TTL cache behavior
            ├── price.test.ts           # Unit: price service fallback logic
            ├── markets-fallback.test.ts # Unit: market data fallback chain
            ├── strx-fallback.test.ts   # Unit: sTRX dashboard fallback
            ├── account-multicall.test.ts # Unit: Multicall3 account queries
            ├── balance.test.ts         # Integration: TRX & TRC20 balances
            ├── blocks.test.ts          # Integration: block queries
            ├── contracts.test.ts       # Mixed: pure ABI helpers + integration reads
            ├── tokens.test.ts          # Integration: TRC20 token metadata
            ├── transactions.test.ts    # Integration: transaction fetch
            ├── transfer.test.ts        # Write: skipped by default (TEST_TRANSFER=1)
            ├── staking.test.ts         # Write: skipped by default (TEST_STAKING=1)
            ├── energy-rental.test.ts   # Integration: energy rental queries; Write: skipped (TEST_ENERGY_RENTAL=1)
            ├── strx-staking.test.ts    # Integration: sTRX queries; Write: skipped (TEST_STRX_STAKING=1)
            └── wallet.test.ts          # Unit: agent-wallet integration tests

Testing

# Run all tests (pure/unit tests always pass; integration tests need network)
npm test

# Run individual test files (recommended to avoid TronGrid rate limits)
npx vitest run tests/core/services/utils.test.ts
npx vitest run tests/core/services/address.test.ts
npx vitest run tests/core/services/balance.test.ts
npx vitest run tests/core/services/blocks.test.ts
npx vitest run tests/core/services/contracts.test.ts
npx vitest run tests/core/services/transactions.test.ts
npx vitest run tests/core/services/tokens.test.ts

# Energy rental & sTRX staking read tests
npx vitest run tests/core/services/energy-rental.test.ts
npx vitest run tests/core/services/strx-staking.test.ts

# Enable write/staking tests (uses real funds — use Nile testnet!)
# Requires agent-wallet to be configured: npx agent-wallet start
TEST_TRANSFER=1 npx vitest run tests/core/services/transfer.test.ts
TEST_STAKING=1 npx vitest run tests/core/services/staking.test.ts
TEST_ENERGY_RENTAL=1 npx vitest run tests/core/services/energy-rental.test.ts
TEST_STRX_STAKING=1 npx vitest run tests/core/services/strx-staking.test.ts

# Moolah V2 end-to-end write-path test on nile (vault deposit/withdraw +
# market supply-collateral/borrow/repay). Requires a funded nile wallet:
# see forTest/docs/v1.1.0/nile-write-path-runbook.md for the runbook.
TEST_MOOLAH_WRITE=1 npx vitest run tests/integration/moolah-writes.nile.test.ts

Rate limiting: Integration tests make real RPC calls to TronGrid. Without TRONGRID_API_KEY the free tier limits to a few requests per second. Run test files individually, or set TRONGRID_API_KEY to avoid 429 errors.

Troubleshooting

Symptom

Likely cause

Fix

MCP client doesn't list any tools (stdio)

Server not launched, or wrong command/path in client config

Verify the client command/args point to this server (npx @justlend/mcp-server-justlend or tsx src/index.ts). Check the client's MCP logs for a spawn error.

429 Too Many Requests / slow market reads on mainnet

TronGrid free-tier rate limit

Set TRONGRID_API_KEY (strongly recommended for mainnet). Avoid tight polling; use get_wallet_balances/get_all_markets batch tools instead of per-token loops.

HTTP/SSE returns 401 Unauthorized

Missing/wrong Authorization header in HTTP mode

HTTP mode is fail-closed: set MCP_API_KEY on the server and send Authorization: Bearer <key> from the client. /health is the only unauthenticated path.

Server refuses to start: MCP_API_KEY is required in HTTP mode

HTTP/SSE transport started without an API key

Set MCP_API_KEY (e.g. openssl rand -base64 32). stdio mode does not require it.

503 Too many active sessions (HTTP)

Concurrent SSE sessions exceed MCP_MAX_SESSIONS (default 100)

Close idle clients or raise MCP_MAX_SESSIONS. Stale sessions are swept every 60s.

Write tool errors with "no wallet" / wallet selection guide

No wallet mode chosen yet

Run npx agent-wallet start or select agent mode, and configure AGENT_WALLET_PASSWORD. Then retry.

Write tool fails with a pre-flight REVERT on mainnet

The transaction would revert on-chain (fail-closed by design)

Read the returned revert reason; fix the precondition (e.g. call approve_underlying before supply, enter_market before borrowing). The server does not broadcast simulated-revert txs on mainnet.

approval_required returned from supply/repay

TRC20 allowance below the amount

Call approve_underlying first (prefer an exact amount; max is opt-in and grants unlimited allowance).

Wrong network / unexpected addresses

Active network not set as intended

Check with get_network; switch with set_network (mainnet / nile). Nile is the testnet for safe write testing.

Amounts look off by 6–18 orders of magnitude

Double-applying token decimals

Balance/amount tool outputs are already human-readable (decimals applied) and carry decimals + _unit; do not divide again. See mcp-api-list.md for each tool's output units.

For deeper inspection, run the server under the MCP Inspector and watch stderr — startup diagnostics, auth failures, and schema errors are logged there (stdout is reserved for the MCP protocol frames in stdio mode).

Security Considerations

  • Private keys are managed by @bankofai/agent-wallet — never stored in environment variables or exposed via MCP tools

  • Wallet encryption: Keys are stored in ~/.agent-wallet/ with password-based encryption

  • Write operations are clearly marked with destructiveHint: true in MCP annotations

  • Transaction summaries before signing: contract write paths pass signer-facing summaries with network, contract, function, arguments, callValue, feeLimit, and simulation status

  • Address validation before signing: transfer and approval services reject invalid recipient/token/spender addresses before contract loading or wallet signing

  • Precision-safe value handling: sTRX staking uses string/BigInt parsing for TRX Sun conversion and 18-decimal sTRX display/estimates

  • Self-describing amounts: balance/amount fields return human-readable values with explicit _unit + decimals (and raw where applicable) so agents never re-apply decimals or misjudge magnitude. New tools should build amounts with describeAmount(raw, decimals, unit) from core/services/bigint-math.ts.

  • Health factor checks in prompts prevent dangerous borrowing

  • Always test on Nile testnet before mainnet operations

  • Be cautious with unlimited approvals (approve_underlying with max)

Example Conversations

"What are the best supply rates on JustLend right now?" → AI calls get_all_markets, sorts by supplyAPY, presents ranking

"I want to supply 10,000 USDT to earn interest" → AI uses supply_assets prompt: checks balance → approves USDT → supplies → verifies

"Am I at risk of liquidation?" → AI calls get_account_summary, analyzes health factor, warns if < 1.5

"Borrow 500 USDT against my TRX collateral" → AI uses borrow_assets prompt: checks collateral → calculates new health factor → executes if safe

"What is the TRX balance of address TXxx...?" → AI calls the general-purpose TRX balance tool, returns balance in both TRX and Sun

"Freeze 100 TRX for ENERGY" → AI calls staking service to freeze via Stake 2.0, returns transaction hash

"Show me the latest governance proposals" → AI calls get_proposal_list, displays proposals sorted by ID with status and vote counts

"I want to vote for proposal #425 with 1000 JST" → AI checks get_vote_info → if no votes, suggests approve_jst_for_voting + deposit_jst_for_votes → then cast_vote

"Withdraw my votes from completed proposals" → AI calls get_user_vote_status to find withdrawable proposals → calls withdraw_votes_from_proposal for each

"How much does it cost to rent 300,000 energy for 7 days?" → AI calls calculate_energy_rental_price with energyAmount=300000, durationHours=168, returns cost breakdown

"Rent 500,000 energy to address TXxx... for 14 days" → AI uses rent_energy prompt: checks balance → checks rental status → calculates price → rents energy → verifies

"Cancel my energy rental to TXxx..." → AI calls get_energy_rent_info to verify active rental → calls return_energy_rental → confirms refund

"Stake 1000 TRX to earn sTRX rewards" → AI uses stake_trx prompt: checks balance → checks exchange rate & APY → stakes TRX → verifies sTRX received

"Do I have any sTRX rewards to claim?" → AI calls get_strx_account to check claimable rewards → calls claim_strx_rewards if available

"Can I withdraw my unstaked TRX?" → AI calls check_strx_withdrawal_eligibility to check unbonding status and completed withdrawal rounds

"Deposit 500 USDT into the JustLend V2 vault" (Moolah) → AI uses moolah_supply prompt: lists vaults with APY → selects USDT → checks allowance → calls approve_moolah_vault → calls moolah_vault_deposit → verifies shares via get_moolah_vault

"What's my risk on the TRX→USDT market?" (Moolah) → AI calls get_moolah_user_position for the market, interprets the risk ratio (0–1 where 1.0 = liquidatable), warns at >0.85

"Find me a liquidation opportunity" (Moolah) → AI calls get_moolah_pending_liquidations with minRiskLevel=1.0 → for a target, calls get_moolah_liquidation_quote → estimates profit → if viable, guides through approve_liquidator_token + moolah_liquidate

"How much did I supply to JustLend in the last month?" → AI calls get_lending_records paginated and filters action type 1 (supply) from the returned actionName

Changelog

See CHANGELOG.md for the per-version history (Keep a Changelog format, SemVer).

License

MIT License Copyright (c) 2026 JustLend SPDX-License-Identifier: MIT

Available Tools

73 tools
approve_jst_for_votingA
Idempotent

Approve JST token for the WJST voting contract. Required before depositing JST to get voting power. Pass the EXACT amount you intend to deposit (recommended). Pass amount='max' for unlimited approval ONLY when the user explicitly opts in — it lets the WJST contract spend the user's entire JST balance, present and future, until revoked.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesExact amount to approve (e.g. '1000'), or 'max' for unlimited (NOT recommended; user must opt in).
networkNoNetwork. Default: mainnet

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide idempotentHint and destructiveHint, but description adds behavioral context: the approval is a write operation, and 'max' grants unlimited spending until revoked, which is critical safety information.

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?

Four sentences, each essential. Front-loaded with action and necessity, followed by parameter guidance. No redundant or vague language.

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 needed; effect is clear. Covers prerequisite, parameter choices, and safety considerations. Complete for this tool's complexity.

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 already covers parameters with descriptions (100% coverage). Description adds value by explaining the rationale for exact vs max amount and the risk of max, which goes beyond schema syntax.

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?

Describes the specific action (approve JST for WJST voting contract), states the prerequisite role, and distinguishes from sibling approval tools by naming the target contract and use case.

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

Usage Guidelines5/5

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

Explicitly states when to use (before depositing JST for voting), provides clear recommendation for amount parameter (exact amount recommended, 'max' only with user opt-in), and warns about consequences of unlimited approval.

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

approve_liquidator_tokenA
Idempotent

Approve loan token spending for the Moolah public liquidator contract. Required before calling moolah_liquidate. Pass the EXACT amount you intend to use (recommended). Pass amount='max' for unlimited approval ONLY when the user explicitly opts in — it lets the liquidator contract spend the user's entire balance, present and future, until revoked (amount='0').

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesExact amount to approve (e.g. '100'), or 'max' for unlimited (NOT recommended; user must opt in).
networkNoNetwork. Default: mainnet
tokenSymbolYesToken symbol for display (e.g. 'USDT')
tokenAddressYesLoan token contract address (Base58)
tokenDecimalsYesToken decimals (e.g. 6 for USDT). Integer in [0, 38].

TDQS

A4.7/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true and not destructive. The description adds context about the implications of 'max' (unlimited spending until revoked) and the recommended exact amount. It does not contradict annotations.

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: purpose, prerequisite, and detailed instruction. Front-loaded with key action. No redundancy or unnecessary words.

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 tool's simple nature (approval with a key parameter), the description covers purpose, usage context, and parameter nuance. It also mentions the follow-up tool (moolah_liquidate) and revocation, making it complete for agent use.

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 covers all parameters (100%), baseline 3. The description significantly enriches the 'amount' parameter with actionable guidance beyond the schema, explaining the trade-offs of 'exact' vs 'max' and how to revoke.

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 clearly states the verb 'approve' and the specific resource 'loan token spending for the Moolah public liquidator contract'. It distinguishes this tool from sibling approval tools by naming the specific contract and linking to moolah_liquidate.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Required before calling moolah_liquidate.' Provides guidance on amount usage and warns about 'max' only with user opt-in, and mentions revoking with amount='0'.

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

approve_moolah_proxyA
Idempotent

Approve TRC20 token spending for the Moolah core contract before supplying collateral or repaying. Not needed for TRX operations. Pass the EXACT amount you intend to use (recommended). Pass amount='max' for unlimited approval ONLY when the user explicitly opts in — it lets the Moolah proxy spend the user's entire balance, present and future, until revoked (amount='0').

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesExact amount to approve (e.g. '100'), or 'max' for unlimited (NOT recommended; user must opt in).
networkNoNetwork. Default: mainnet
tokenSymbolYesToken symbol for display (e.g. 'USDT')
tokenAddressYesTRC20 contract address (Base58)
tokenDecimalsYesToken decimals (e.g. 6 for USDT). Integer in [0, 38].

TDQS

A4.7/5.0
Behavior5/5

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

The description clearly explains the behavior beyond annotations: it details the two approval modes (exact vs. max) and their consequences, including the risk of unlimited spending. It also specifies that the tool writes transaction data (implied by 'approve' and not read-only). No contradiction with annotations.

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 concise (few sentences), front-loaded with the core purpose, and each sentence adds unique guidance. It does not waste words.

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

Completeness3/5

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

The description covers the purpose and usage well but does not mention the output (e.g., transaction hash) or prerequisites (e.g., wallet must be connected). Given the tool's complexity (blockchain approval), the description could be more complete by explaining the expected result and any necessary prior actions. However, the high schema coverage and annotations partially compensate.

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 schema covers all parameters with descriptions (100% coverage). The tool description adds extra context for the 'amount' parameter, specifying when to use exact vs. max and the associated risks, which enhances semantic understanding beyond the schema's pattern and description. For other parameters, the description doesn't add new info, but the schema is sufficient.

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 clearly states the action (approve TRC20 token spending), the target (Moolah core contract), and the context (before supplying collateral or repaying). It also explicitly notes it's not needed for TRX operations, distinguishing it from other operations. Given sibling tools have different approval targets, this description effectively differentiates.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool (before supplying collateral or repaying), what amount to pass (exact recommended, 'max' only with explicit user opt-in), and what not to use it for (TRX operations). This provides clear decision guidance for the AI agent.

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

approve_moolah_vaultA
Idempotent

Approve TRC20 token spending for a Moolah vault before depositing. Not needed for TRX vaults. Pass the EXACT amount you intend to deposit (recommended). Pass amount='max' for unlimited approval ONLY when the user explicitly opts in — it lets the vault contract spend the user's entire balance, present and future, until revoked (amount='0').

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesExact amount to approve (e.g. '100'), or 'max' for unlimited (NOT recommended; user must opt in).
networkNoNetwork. Default: mainnet
vaultSymbolYesVault symbol: 'USDT' or 'USDD'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful context: it's a prerequisite for deposit, not needed for TRX vaults, and explains the risk of 'max' approval and revocation ('amount=0'). No contradiction with annotations.

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 three concise sentences with no wasted words. It front-loads the purpose and key guidance, making it easy to parse quickly.

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 simple approval tool with no output schema, the description covers all necessary context: what it does, when required, parameter tips, and safety warnings. It is complete for the task.

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 has 100% coverage with parameter descriptions. The description adds significant nuance for the 'amount' parameter (exact vs. max, revocation nuance), improving the agent's understanding beyond the schema. The other parameters ('vaultSymbol', 'network') are not elaborated, but the added value for 'amount' raises the score.

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 clearly states the tool approves TRC20 token spending for a Moolah vault before depositing, distinguishing it from TRX vaults and other approval tools. It specifies the action, resource ('Moolah vault'), and scope, setting it apart from siblings like 'approve_moolah_proxy'.

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 description tells when to use (before depositing, not for TRX vaults) and gives recommendations (exact amount preferred, 'max' only with user opt-in). It lacks explicit mention of alternatives among sibling approve tools, but the context is clear.

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

approve_underlyingA
Idempotent

Approve the jToken contract to spend your underlying TRC20 tokens. Required before supply() or repay() for TRC20-backed markets (not needed for jTRX). Pass the EXACT amount you intend to use (recommended). Pass amount='max' for unlimited approval ONLY when the user explicitly opts in — it lets the jToken contract spend the user's entire balance, present and future, until revoked. Typical cost: ~23,000 energy + ~265 bandwidth.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesExact amount to approve (e.g. '100'), or 'max' for unlimited (NOT recommended; user must opt in).
marketYesjToken symbol (e.g. 'jUSDT')
networkNoNetwork. Default: mainnet

TDQS

A5/5.0
Behavior5/5

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

Discloses important behavioral traits: cost (~23k energy + 265 bandwidth), idempotent (safe to call repeatedly), and risk of unlimited approval. Annotations (idempotent=true, destructive=false) are consistent, and description adds significant context beyond them.

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?

Very concise: four sentences covering purpose, prerequisite, amount recommendation with caveat, and cost. No filler; each sentence earns its place. Front-loaded with core action.

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 no output schema, the description fully covers what an agent needs: prerequisites (TRC20 markets), parameter usage (amount, market, network), edge cases (max approval), and cost. Complete for a transaction tool.

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

Parameters5/5

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

Schema coverage is 100%, but description adds value by explaining the amount parameter's practical meaning (exact vs. max with security warning) and the context of market parameter (jToken symbol). Does not merely repeat 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?

Clearly states the tool approves jToken contract to spend underlying TRC20 tokens. Specifies when required (before supply/repay for TRC20 markets, not for jTRX), distinguishing it from sibling approve tools like approve_jst_for_voting.

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

Usage Guidelines5/5

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

Explicitly states when to use (required before supply/repay for TRC20 markets) and when not (jTRX). Provides clear guidance on amount: recommend exact, 'max' only with explicit user opt-in. No ambiguity.

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

calculate_energy_rental_priceA
Read-only

Calculate the cost to rent a specific amount of energy for a given duration. Returns TRX amount needed, rental rate, fee, total prepayment, security deposit, and daily cost. For NEW rentals: provide energyAmount and durationHours. For RENEWALS: provide energyAmount and receiverAddress. The tool auto-detects existing rentals and calculates the incremental cost (subtracting existing security deposit). durationHours is optional for renewals (defaults to 0 = no additional time).

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
energyAmountYesAmount of energy to rent (minimum 300,000 for new rental, minimum 50,000 for renewal)
durationHoursNoRental duration in hours. Required for new rentals (minimum 1). Optional for renewals (default 0 = no additional time).
receiverAddressNoReceiver address. If provided, checks for existing rental to calculate renewal cost.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already show readOnlyHint=true, so the description's behavioral context about auto-detection and incremental cost calculation adds value beyond annotations. It discloses that for renewals it subtracts existing security deposit, which is a key behavioral detail.

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 about 100 words, front-loaded with the core purpose, and well-structured with separate sections for new and renewals. It could be slightly more concise but no unnecessary 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?

The description lists return values (important since there's no output schema), explains auto-detection for renewals, and gives parameter context. It could specify units or output format, but overall it's sufficient for an agent to use 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?

Schema coverage is 100% but the description adds meaning by clarifying the different minimums for new (300,000) vs renewal (50,000) and the conditional requirement of durationHours. This goes beyond the schema's generic 'minimum 50,000' and 'required for new' context.

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 clearly states it calculates the cost to rent energy for a given duration, and distinguishes between new rentals and renewals. It lists the specific return values, and the contrast with siblings like 'get_energy_rental_rate' (rate only) and 'rent_energy' (executes) is implicit.

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 description explicitly tells when to use each parameter combination (new vs renewal) and mentions auto-detection of existing rentals. It does not explicitly list when not to use this tool, but the context of siblings and the detailed parameter guidance make it clear.

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

cast_voteA
Destructive

Cast a vote on a governance proposal. You must have available votes (deposit JST first if needed). Support: true = vote FOR, false = vote AGAINST. You can add more votes to a proposal you already voted on.

ParametersJSON Schema
NameRequiredDescriptionDefault
votesYesAmount of votes to cast (e.g. '1000')
networkNoNetwork. Default: mainnet
supportYestrue = vote FOR the proposal, false = vote AGAINST
proposalIdYesThe proposal ID to vote on

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds value by explaining the support parameter's boolean semantics and the ability to stack votes on a previously voted proposal, which goes beyond the schema.

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 three sentences with no filler. Each sentence serves a purpose: prerequisite, parameter explanation, and notable capability. Front-loaded with the core action.

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

Completeness3/5

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

The description covers prerequisites and parameter behavior but omits details about the return format, error scenarios (e.g., insufficient votes, invalid proposal), and any side effects. For a mutation tool with destructiveHint=true and no output schema, this leaves uncertainty for the agent.

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 descriptions already exist. The description adds nuance by clarifying that the 'support' true/false corresponds to FOR/AGAINST (redundant but helpful) and that 'votes' can be used to add to an existing vote on the same proposal, which is not in 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?

The description clearly states the action ('Cast a vote') and resource ('governance proposal'), and distinguishes from sibling tools like deposit_jst_for_votes or withdraw_votes by focusing on the actual voting action, including semantics for support and the ability to add votes.

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 description provides a clear prerequisite ('must have available votes, deposit JST first if needed') and notes that repeated use is allowed for adding more votes. However, it does not explicitly contrast with alternatives like checking vote status or withdrawing votes.

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

check_jst_allowance_for_votingA
Read-onlyIdempotent

Check if JST has been approved for the WJST voting contract. Must be approved before depositing JST to get votes.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A4.7/5.0
Behavior5/5

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

Description reinforces annotations (readOnlyHint=true, destructiveHint=false) by stating it's a check. Adds context about prerequisite step, no contradictions. High 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?

Two sentences, front-loaded with action, no unnecessary words. Efficient and clear.

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 simple read-only check, description is complete. No output schema needed; binary result is implied. Provides full context for agent to select and invoke correctly.

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 parameters are well-described with defaults and patterns. Description adds no extra meaning beyond schema. Baseline 3 is appropriate.

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 clearly states the verb 'check' and the resource 'JST allowance for WJST voting contract'. It distinguishes from siblings like 'check_allowance' by specifying the context and from 'approve_jst_for_voting' which is the write counterpart.

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

Usage Guidelines5/5

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

Explicitly states 'Must be approved before depositing JST to get votes', indicating when to use and implying the need for 'approve_jst_for_voting' if not approved. Provides clear context and alternatives.

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

check_strx_withdrawal_eligibilityA
Read-only

Check if user has TRX available to withdraw after sTRX unstaking unbonding period. Shows staked amount, claimable rewards, pending/completed unstake rounds, and withdrawal status.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoAddress to check. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds specific behavioral details: it shows staked amount, claimable rewards, rounds, and withdrawal status, which clarifies what data the tool returns. No contradictions with 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 a single concise sentence that efficiently communicates purpose and output. It is front-loaded with the main action and resource. A slight improvement could be listing outputs more explicitly, but it is still efficient.

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?

Given the tool's low complexity (2 optional params, no output schema), the description adequately covers what it does and what it returns. However, it does not elaborate on conditions for withdrawal eligibility (e.g., whether unbonding period has passed) or reinforce read-only nature, but it is sufficient for a simple check 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?

Schema coverage is 100%, with both address and network parameters documented. The description does not add per-parameter details beyond the schema, but it indirectly provides context by explaining the tool's purpose. Baseline 3 is appropriate as the description does not enhance parameter understanding.

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 clearly states the verb 'Check' and the specific resource 'TRX available to withdraw after sTRX unstaking unbonding period'. It also lists key data shown: staked amount, claimable rewards, pending/completed unstake rounds, withdrawal status. This distinguishes it from sibling tools like get_strx_balance or get_strx_account, which are more general.

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?

The description does not provide explicit guidance on when to use this tool versus alternatives. It implies the context of checking after unbonding period but fails to mention exclusions or alternative tools (e.g., get_strx_records) that might be more appropriate for other queries.

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

claim_moolah_mining_periodA
Destructive

Claim a single V2 mining airdrop round via multiClaim() on the Moolah merkle distributor. Pass periodKey from get_moolah_pending_mining_periods (preferred) or supply merkleIndex / index / amounts / proof directly. Pre-checks isClaimed() and merkleRoots() on-chain so the wallet does not pay gas for a guaranteed-revert tx. Mainnet currently errors with 'distributor not configured' until the V2 contract ships — nile testnet works.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoOverride: leaf index inside the tree
proofNoOverride: merkle proof (bytes32[])
addressNoOwner address used to refetch the airdrop entry when periodKey is supplied. Default: signing wallet
amountsNoOverride: token amounts in raw units (integer strings), slot-aligned with the tree's tokenAddress[]
networkNoNetwork. Default: mainnet
periodKeyNoRound key from get_moolah_pending_mining_periods (preferred)
merkleIndexNoOverride: merkle tree index

TDQS

A4.9/5.0
Behavior5/5

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

Discloses on-chain pre-checks (isClaimed, merkleRoots) to avoid gas waste on reverting transactions. Annotations already mark destructiveHint=true, but the description adds valuable context about gas-saving behavior and current network restrictions.

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 efficiently convey purpose, usage options, pre-checks, and network status. Front-loaded with core action, no wasted words.

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?

Thoroughly covers all aspects needed for an agent to use the tool: method, input options, pre-checks, and current deployment status. No output schema needed since it's a mutation.

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 provides full parameter descriptions (100% coverage). The description adds value by highlighting periodKey as preferred and explaining how override params work. Slight deduction because the schema already does 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?

Clearly states it claims a single V2 mining airdrop round via multiClaim(). Distinguishes from sibling claim_v1_mining_period by specifying V2 and referencing get_moolah_pending_mining_periods for periodKey.

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

Usage Guidelines5/5

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

Explicitly recommends using periodKey from get_moolah_pending_mining_periods or supplying override params directly. Warns about mainnet error and suggests nile testnet as alternative. Provides clear when-to-use and current limitations.

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

claim_rewardsA

Claim accrued JustLend mining rewards for the configured wallet. Typical cost: ~60,000 energy + ~330 bandwidth.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate a write operation (readOnlyHint=false) and non-destructive behavior (destructiveHint=false). The description adds cost information not in annotations, but does not disclose edge cases like no rewards, network-specific behavior, or transaction confirmation.

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 sentences: first states purpose, second adds cost detail. No redundant information, front-loaded, and efficient. Every sentence earns its place.

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

Completeness3/5

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

The description covers the main action and cost but lacks details on return value, transaction behavior, or error handling. For a simple write operation with no output schema, it is minimally adequate but could provide more context.

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 optional parameter (network) with 100% schema coverage. The description does not add any additional meaning beyond what the schema provides, so baseline 3 is appropriate.

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?

Description clearly states the action ('Claim'), resource ('accrued JustLend mining rewards'), and scope ('for the configured wallet'). It distinguishes from siblings like 'claim_strx_rewards' and 'claim_moolah_mining_period' by specifying the reward type and protocol.

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 mentions the typical cost but does not provide explicit guidance on when to use this tool versus alternatives. It implies usage when claiming JustLend rewards, but lacks prerequisites or exclusions.

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

claim_strx_rewardsA
Destructive

Claim all available sTRX staking rewards. Pre-checks: verifies there are claimable rewards before executing.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds the pre-check behavior, but does not elaborate on other side effects or state changes beyond what annotations imply.

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 concise with two front-loaded sentences, no unnecessary words, and clearly communicates the purpose and a key behavioral aspect.

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 simple tool with one optional parameter and no output schema, the description covers the purpose and pre-check behavior. Schema covers the parameter, so it is sufficiently complete.

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% for the single 'network' parameter. The description does not add any additional meaning beyond the schema, so baseline score of 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?

The description clearly states the tool 'Claim all available sTRX staking rewards' using a specific verb and resource. It distinguishes from sibling tools like 'claim_rewards' by specifying sTRX staking.

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 mentions a pre-check for claimable rewards, implying safe usage, but does not explicitly state when to use this tool versus alternatives like 'get_claimable_rewards' or when not to use it.

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

claim_v1_mining_periodA
Destructive

Claim a single V1 mining airdrop round via multiClaim() on the appropriate merkle distributor. Pass key from get_claimable_rewards (preferred) or supply merkleIndex / index / amount / proof directly. Routing matches the front-app: amount[] → multi-merkle distributor (multi-token leaf); single + USDD → USDDNEW distributor; single + other → main distributor. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoRound key from get_claimable_rewards (preferred)
indexNoOverride: leaf index inside the tree
proofNoOverride: merkle proof (bytes32[])
amountNoOverride: token amount(s) in raw units (integer strings); pass an array for multi-token leaves
addressNoOwner address used to refetch the airdrop entry when key is supplied. Default: signing wallet
networkNoNetwork. Default: mainnet
selectorNoForce a selector. 'single' = (uint256,uint256,uint256,bytes32[])[]; 'multi' = (uint256,uint256,uint256[],bytes32[])[]
distributorNoForce a specific distributor address. Set with `selector` to bypass routing.
merkleIndexNoOverride: merkle tree index
tokenSymbolNoOverride: token symbol(s); useful when tokenAddress is missing
tokenAddressNoOverride: token address(es) used for routing when the entry is single-token

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the tool modifies state. The description adds behavioral context by detailing the routing logic (multi-merkle vs USDDNEW vs main distributor), which goes beyond annotations. It also specifies mainnet-only, a key constraint. The description does not mention gas costs or failure modes, but with annotations present, this is sufficient.

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 three sentences, each serving a purpose: action, parameter options, and routing logic. It is front-loaded with the core purpose and contains no fluff. Every sentence earns its place, making it highly efficient.

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?

Given the tool's complexity (11 parameters, no output schema), the description covers the main use case, parameter approaches, routing, and network restriction. It does not mention prerequisites (e.g., eligibility) or output details, but annotations cover the destructive nature. Overall, it provides sufficient context for an agent to use the tool 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?

Schema coverage is 100%, so each parameter already has a description. The tool description adds value by explaining the preferred usage of key and the routing logic that depends on amount, selector, and distributor. This helps the agent understand parameter interactions beyond the schema, earning a score above the baseline of 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?

The description clearly states the tool claims a single V1 mining airdrop round via multiClaim() on the appropriate merkle distributor. The verb 'claim' paired with the specific resource 'V1 mining airdrop round' and mechanism 'multiClaim()' makes the purpose unambiguous. It also distinguishes from the sibling 'claim_moolah_mining_period' by explicitly mentioning V1 and routing logic.

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 provides guidance on using the key from get_claimable_rewards (preferred) or directly supplying merkleIndex/index/amount/proof, and specifies mainnet-only. However, it does not compare this tool to other claim tools like claim_moolah_mining_period or explain when not to use it, so the guidance is partial.

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

deposit_jst_for_votesA
Destructive

Deposit JST into the WJST contract to get voting power. Requires prior approval of JST for the WJST contract (use approve_jst_for_voting first). 1 JST = 1 Vote. Deposited JST can be withdrawn back after voting.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of JST to deposit (e.g. '1000')
networkNoNetwork. Default: mainnet

TDQS

A4.7/5.0
Behavior5/5

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

Disclosures match annotations (destructiveHint=true) and add value by stating that deposited JST can be withdrawn after voting. 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.

Conciseness5/5

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

Three concise sentences covering action, prerequisite, conversion, and reversibility. No fluff.

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 its complexity: explains workflow, prerequisites, conversion, and withdrawal. Aligns well with 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?

Schema has 100% coverage for parameters. Description adds meaning with '1 JST = 1 Vote', clarifying the impact of the 'amount' parameter beyond schema description.

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 clearly states the action (deposit), resource (JST into WJST contract), and purpose (get voting power). It distinguishes from sibling tools like 'approve_jst_for_voting' and 'withdraw_votes_to_jst'.

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?

Explicitly states prerequisite (use approve_jst_for_voting first), guiding the agent on the correct sequence. Lacks explicit 'when not to use' but provides clear context.

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

enter_marketA
Idempotent

Enable a jToken market as collateral. Required before borrowing against supplied assets. Once entered, your supply in this market counts towards your borrowing capacity. Typical cost: ~80,000 energy + ~300 bandwidth.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesjToken symbol (e.g. 'jUSDT', 'jTRX')
networkNoNetwork. Default: mainnet

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true and readOnlyHint=false, so the tool is a safe-to-repeat mutation. The description adds valuable behavioral context: the effect on borrowing capacity and the typical cost (~80,000 energy + ~300 bandwidth). It does not cover potential errors or prerequisites beyond 'supplied assets', but overall adds transparency beyond annotations.

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 four short sentences, front-loaded with the primary action. Every sentence adds value: purpose, prerequisite, effect, and cost. No unnecessary words or redundancy.

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?

Given no output schema, the description explains the key behavioral outcome (supply counts toward borrowing capacity) and cost. It could mention that supplying must occur before entering, but that is implied by 'Required before borrowing against supplied assets.' It is sufficiently complete for a tool with two simple parameters.

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 description adds no new information about the parameters beyond what the schema already provides (e.g., 'market' is a jToken symbol). The example in the schema ('jUSDT', 'jTRX') is sufficient, so the description does not improve 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?

The description clearly states the action: 'Enable a jToken market as collateral.' It specifies the verb 'enable' and the resource 'jToken market', and distinguishes from sibling tools like exit_market and borrow by noting it is required before borrowing.

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 description explicitly states when to use: 'Required before borrowing against supplied assets.' It also explains the effect: 'Once entered, your supply in this market counts towards your borrowing capacity.' However, it does not explicitly state when not to use or mention alternatives like exit_market.

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

estimate_lending_energyA
Read-onlyIdempotent

Estimate energy, bandwidth, and TRX cost for any JustLend operation BEFORE executing it. Covers ALL operations: supply, withdraw, withdraw_all, borrow, repay, approve, enter_market, exit_market, claim_rewards. Tries on-chain simulation first; falls back to historical typical values if simulation fails. Returns per-step breakdown (e.g. approve + mint for supply), total energy, total bandwidth, and estimated TRX cost. For supply/repay: automatically checks current allowance — if sufficient, the approve step is skipped. For approve: supports custom spender address (not just jToken). Use this tool whenever the user asks about gas/energy/cost for any lending operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoAmount in underlying token units (e.g. '100'). Default: '1'. Not needed for enter_market, exit_market, approve, withdraw_all, claim_rewards.
marketYesjToken symbol (e.g. 'jUSDT', 'jTRX', 'jUSDD'). Required for all operations except claim_rewards.
addressNoTRON address for simulation. Default: configured wallet
networkNoNetwork. Default: mainnet
spenderNoCustom spender address for approve operation. Default: jToken contract address. Only used when operation is 'approve'.
operationYesThe operation to estimate resources for

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds crucial behavior: 'Tries on-chain simulation first; falls back to historical typical values if simulation fails.', 'Returns per-step breakdown...', and 'For supply/repay: automatically checks current allowance — if sufficient, the approve step is skipped.' This provides transparency about reliability and edge cases.

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 purpose and well-structured. It lists operations in a sentence and explains fallback, breakdown, and special cases. It is slightly long but each sentence adds value; a minor trim could improve conciseness without losing 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?

Despite no output schema, the description explains the return value: per-step breakdown, total energy, total bandwidth, estimated TRX cost. It covers all operations, fallback behavior, and handle edge cases (allowance check, custom spender). This is complete for an estimation tool.

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

Parameters5/5

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

All 6 parameters have schema descriptions (100% coverage). The description adds significant meaning: explains default amount ('1'), clarifies spender usage for approve, and notes which operations omit amount (enter_market, withdraw_all, etc.). This enriches understanding beyond 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?

The description clearly states the tool estimates energy, bandwidth, and TRX cost for any JustLend operation before execution. It lists all covered operations (supply, withdraw, etc.) and implies it is for estimation, not execution. This is specific and distinguishes from siblings like estimate_moolah_energy.

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 description tells when to use: 'whenever the user asks about gas/energy/cost for any lending operation'. It also says 'BEFORE executing' which implies it is not for after the fact. While it does not explicitly state when not to use, the context and fallback behavior are clear. Could be more explicit about alternatives.

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

estimate_moolah_energyA
Read-onlyIdempotent

Estimate energy, bandwidth, and TRX cost for a JustLend V2 (Moolah) write operation BEFORE executing it. Returns historical typical values (on-chain simulation for Moolah's tuple-args ops is not yet wired). Set isTRX=true when the underlying / loan / collateral token is native TRX (TrxProviderProxy route). Covers: vault_deposit, vault_withdraw, vault_redeem, approve_vault, supply_collateral, withdraw_collateral, borrow, repay, approve_proxy, liquidate, approve_liquidator.

ParametersJSON Schema
NameRequiredDescriptionDefault
isTRXNoWhether the route uses native TRX (via TrxProviderProxy). Default: false
addressNoOwner address for resource-sufficiency check. Default: configured wallet
networkNoNetwork. Default: mainnet
operationYesMoolah operation to estimate

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by disclosing that results are 'historical typical values' and that on-chain simulation is not wired, which are important limitations not present in 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 compact and front-loaded with the main purpose. It efficiently conveys key information without unnecessary words, though it could be slightly more streamlined.

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 no output schema, the description does not detail return values but acknowledges they are historical typical values. For 4 parameters and no nested objects, the description provides sufficient context for a typical estimation tool, though more precision on output format would help.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds context for isTRX (explaining when to set true) and enumerates all valid operation values. This additional guidance goes beyond the schema descriptions.

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 clearly states the tool estimates energy, bandwidth, and TRX cost for Moolah write operations. It specifies the domain (JustLend V2/Moolah) and distinguishes from sibling execution tools like moolah_borrow or other estimation tools like estimate_lending_energy.

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 description instructs when to set isTRX=true and notes that estimation should happen before executing. It lists all covered operations. However, it does not explicitly exclude other protocols or provide guidance on when not to use this tool vs. estimate_lending_energy.

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

exit_marketA
Destructive

Disable a jToken market as collateral. Pre-checks: 1) market must have no outstanding borrows; 2) remaining collateral must still cover all borrows. Typical cost: ~50,000 energy + ~280 bandwidth.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesjToken symbol (e.g. 'jUSDT')
networkNoNetwork. Default: mainnet

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds value by detailing pre-checks and cost (~50,000 energy + ~280 bandwidth). No contradiction with annotations.

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 concise (one sentence plus bullet list) and front-loaded with the core action. Every sentence provides necessary information without waste.

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?

Given the tool's two parameters and no output schema, the description covers pre-conditions and cost sufficiently. It could mention reversibility or outcome, but is adequate for selecting and invoking the 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?

Schema coverage is 100%, so parameters are well-described in the schema. The description does not add new semantic details beyond the schema, meeting the baseline of 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?

The description clearly states the action (disable as collateral) and resource (jToken market). It distinguishes from the sibling 'enter_market' (the opposite operation). The pre-checks further clarify the purpose.

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 pre-checks provide explicit conditions when the tool can be used (no borrows, sufficient remaining collateral). However, it does not explicitly state when not to use or mention alternatives like 'withdraw' or 'enter_market'. The conditions are clear but not exhaustive.

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

get_claimable_rewardsA
Read-onlyIdempotent

Scan all JustLend V1 merkle airdrop distributors for a user's unclaimed rewards. Returns a map keyed by round; each entry includes the merkleIndex, index, amount(s), token symbol/address, and proof. Feed any returned key into claim_v1_mining_period to submit the on-chain multiClaim. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesTRON address. Default: configured wallet
networkNoMust be 'mainnet'. Default: mainnet

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by detailing the return structure (map keyed by round with merkleIndex, amount, token info) and the intended follow-up action, which goes beyond what annotations provide.

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 that are front-loaded with the main action and result. Each sentence adds essential information: what it does, what it returns, and how to use it. No filler or redundancy.

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?

Despite no output schema, the description explains the return format sufficiently. It also mentions mainnet-only and the follow-up tool. For a read-only query tool with annotations, this is complete.

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 covers both parameters (address and network) with descriptions. The description reinforces network must be mainnet but adds no new parameter meaning. Schema description coverage is 100%, so baseline 3 is appropriate.

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 clearly states the tool scans all JustLend V1 merkle airdrop distributors for unclaimed rewards, and distinguishes itself from sibling tools like claim_v1_mining_period and other 'get_' tools by specifying the action and the follow-up tool. The verb 'scan' and resource 'JustLend V1 merkle airdrop distributors' are specific.

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 description explains this tool is used before claim_v1_mining_period to obtain claimable rewards data. It also notes mainnet-only, providing clear context. It does not explicitly state when not to use it, but the context is sufficient.

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

get_energy_rental_dashboardA
Read-onlyIdempotent

Get JustLend energy rental market dashboard data including TRX price, exchange rate, total APY, energy per TRX, total supply, and other market parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by listing returned data fields, but no further behavioral traits (e.g., performance, rate limiting) 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.

Conciseness5/5

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

Single sentence, front-loaded with purpose, lists examples efficiently. No redundancy or 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?

Given low complexity (1 optional param, no output schema, rich annotations), the description is fairly complete, naming key outputs. Could mention network parameter effect or output format for full completeness.

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?

Input schema has 100% coverage with one parameter (network) described. The description does not enhance parameter meaning beyond the schema's 'Network. Default: mainnet'.

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 clearly states it retrieves dashboard data for JustLend energy rental market, listing specific metrics. It distinguishes from siblings like get_energy_rental_params and get_energy_rental_rate by the 'dashboard' scope, but does not explicitly contrast with them.

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 by the 'dashboard' scope versus more specific sibling tools, but no explicit when-to-use or when-not-to-use guidance is provided.

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

get_energy_rental_paramsA
Read-onlyIdempotent

Get on-chain energy rental parameters: liquidation threshold, fee ratio, min fee, total delegated/frozen TRX, max rentable amount, rent paused status, usage charge ratio.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet

TDQS

A4.2/5.0
Behavior4/5

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

Annotations (readOnlyHint, idempotentHint, etc.) already indicate safe read. Description adds specific list of returned fields, providing behavioral context beyond annotations. No contradictions.

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?

Single sentence listing parameters. Slightly verbose but no unnecessary words. Front-loaded with purpose.

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?

Tool is simple (1 optional param, no output schema). Description fully covers what it returns. No gaps.

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 covers 100% with one optional parameter. Description adds default value 'mainnet' not in schema, clarifying optionality and default behavior.

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?

Clear verb 'Get' and resource 'on-chain energy rental parameters'. Lists specific parameters returned. Distinguishes from siblings like get_energy_rental_rate by focusing on overall parameters vs. rate.

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?

No explicit when-to-use or alternatives. Context suggests it's for retrieving static parameters, but no guidance on when to use this versus other energy rental getter tools (e.g., get_energy_rental_dashboard).

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

get_energy_rental_rateA
Read-only

Get the current energy rental rate for a given TRX amount. Returns rental rate, stable rate, and effective rate (max of both).

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
trxAmountYesTRX amount to check rate for (0 for base rate)

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing it as a safe read. The description adds the behavioral detail that the effective rate is the max of both rates. However, it does not disclose the default network (mainnet) or that trxAmount=0 gives base rate, which are present in the schema but not the description.

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 with no wasted words. The first sentence states purpose, the second describes output. Concise and front-loaded.

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?

Given no output schema, the description explains the return values (rental rate, stable rate, effective rate). It covers the primary input and basic output. Missing a mention of the network parameter, but it has a default. Adequate for a simple query 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?

Schema description coverage is 100%, so the schema already documents both parameters. The description merely restates 'for a given TRX amount' without adding new semantics or format details. Baseline score of 3 is appropriate.

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 clearly states the action ('Get'), the resource ('energy rental rate'), and the input ('given TRX amount'). It also lists the returned values (rental rate, stable rate, effective rate), which distinguishes it from sibling tools like get_energy_rental_params or get_energy_rental_records.

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 implies usage for querying rates, but provides no explicit guidance on when to use this tool versus alternatives such as get_energy_rental_dashboard or get_energy_rental_params. No when-not or alternative tool mentions.

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

get_energy_rental_recordsA
Read-onlyIdempotent

Get a user's JustLend energy-rental history: rent, extend, rent_more, end, recycle actions. Distinct from get_user_energy_rental_orders which returns current active on-chain orders — this one returns the full historical action log. Paginated. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed. Default: 1
addressYesTRON address. Default: configured wallet
networkNoMust be 'mainnet'. Default: mainnet
pageSizeNoRecords per page. Default: 20

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds that it is paginated and mainnet-only, and lists specific action types included. This provides additional behavioral context beyond the annotations.

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 two sentences long, front-loaded with the main verb 'Get', and contains no redundant or unnecessary information. Every sentence contributes value.

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?

Without an output schema, the description does not detail return format, but it clearly defines the content as a historical action log and contrasts it with active orders. It mentions pagination and mainnet-only. This is sufficient for the tool's complexity.

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 the schema already describes all parameters. The description does not add extra semantics beyond the schema, except implicitly confirming network must be mainnet. Thus, baseline score of 3 is appropriate.

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 clearly states it retrieves the user's JustLend energy-rental history, listing specific actions (rent, extend, rent_more, end, recycle). It explicitly distinguishes from the sibling tool get_user_energy_rental_orders which returns current active orders, making the purpose specific and unambiguous.

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

Usage Guidelines5/5

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

The description explicitly contrasts with the sibling tool: 'Distinct from get_user_energy_rental_orders which returns current active on-chain orders — this one returns the full historical action log.' It also notes pagination and mainnet-only usage, providing clear guidance on when and how to use it.

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

get_energy_rent_infoA
Read-only

Get on-chain energy rental info for a specific renter-receiver pair. Returns security deposit, rent balance, and whether an active rental exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
renterAddressNoRenter address. Default: configured wallet
receiverAddressYesReceiver address

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so description's main value is listing return fields. However, it does not disclose error handling (e.g., if pair does not exist) or additional behavioral traits beyond annotations.

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?

Description is a single sentence with 22 words, front-loaded with action, no redundant information. Every word is necessary.

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 simple read tool with 3 parameters and no output schema, the description lists three key return fields (security deposit, rent balance, active rental). This is sufficient for agent to understand what to expect.

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% with descriptions for all three parameters. Description adds no extra meaning beyond schema, so baseline 3 is appropriate.

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?

Description uses specific verb 'Get' and clearly identifies resource: on-chain energy rental info for a specific renter-receiver pair. It distinguishes from siblings like get_energy_rental_dashboard (overall view) and get_energy_rental_records (list all).

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 implies usage for a specific pair but does not explicitly state when to use this tool versus alternatives like get_energy_rental_dashboard. No exclusions or alternative tool names are provided.

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

get_lending_recordsA
Read-onlyIdempotent

Get a user's V1 JustLend transaction history: supply, withdraw, borrow, repay, and collateral enable/disable. Paginated. Each record includes actionType (1-11), actionName (human-readable), token, amount, USD value, and txId. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed. Default: 1
addressYesTRON address (T...). Default: configured wallet
networkNoMust be 'mainnet'. Default: mainnet
pageSizeNoRecords per page. Default: 20

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds context about pagination, mainnet constraint, and the structure of returned records (actionType range, fields), enhancing transparency beyond annotations.

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 concise sentences with no unnecessary words. The first sentence immediately conveys the core purpose, and the second provides essential details about pagination and response fields.

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?

Given no output schema, the description covers return fields (actionType, actionName, token, amount, USD value, txId) and mentions pagination. However, it omits details on pagination behavior (e.g., default page size, max pages) and error conditions, but overall sufficient for a read-only 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?

Schema coverage is 100%, so the baseline is 3. The description does not add new parameter semantics beyond what the schema already provides; it only lists record fields in the response, not parameter details.

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 clearly states it retrieves a user's V1 JustLend transaction history, enumerates specific action types (supply, withdraw, borrow, repay, collateral enable/disable), and distinguishes itself from sibling tools like get_moolah_records by specifying the protocol and version.

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?

While it indicates the tool is Mainnet-only, it does not provide explicit guidance on when to use this tool versus alternatives such as get_moolah_records or get_liquidation_records. The description lacks when-not and alternative recommendations.

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

get_liquidation_recordsA
Read-onlyIdempotent

Get a user's V1 JustLend liquidation history — both positions the user liquidated and positions where the user was liquidated. Distinct from get_moolah_liquidation_records which covers V2 Moolah liquidations. Paginated. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed. Default: 1
addressYesTRON address. Default: configured wallet
networkNoMust be 'mainnet'. Default: mainnet
pageSizeNoRecords per page. Default: 20

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark it as read-only, idempotent, and non-destructive. The description adds that it is paginated and mainnet-only, which are behavioral constraints beyond what annotations provide. No contradictions with annotations.

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 two sentences, front-loaded with the core purpose. Every part is informative: what it does, coverage (both directions), distinction from sibling, pagination, and mainnet constraint. No unnecessary words.

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?

Given no output schema, the description explains the return type (liquidation history), covers key constraints (paginated, mainnet-only), and distinguishes from a sibling. It is fairly complete for a read-only tool, though it does not detail the exact fields in the output.

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?

The input schema has 100% description coverage, so the baseline is 3. The description adds context that the records include both directions of liquidation, but this is more about the output than parameter semantics. It does not add significant detail about parameter usage beyond 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?

The description clearly states it retrieves V1 JustLend liquidation history for a user, covering both liquidations initiated by the user and liquidations where the user was the target. It explicitly distinguishes from the sibling tool get_moolah_liquidation_records, which covers V2 Moolah liquidations.

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 description provides guidance on when to use this tool by differentiating it from get_moolah_liquidation_records and noting it is mainnet-only. However, it does not specify when not to use it or mention other alternatives beyond the sibling.

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

get_locked_votesB
Read-onlyIdempotent

Get the number of votes a user has locked in a specific proposal.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet
proposalIdYesThe proposal ID to check

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds no behavioral context beyond these annotations, but does not contradict them.

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 a single sentence that is clear and efficient. It could be slightly more structured (e.g., mention return value) but remains concise.

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

Completeness3/5

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

No output schema is provided, and the description does not specify the return type or format. For a simple query tool, this is a moderate gap; the description implies a numeric value but could be more explicit.

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% with parameter descriptions. The description does not add additional meaning beyond what is in the schema (e.g., defaults or constraints).

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 explicitly states the tool retrieves the number of locked votes for a user and a proposal, using a specific verb and resource. It clearly distinguishes from sibling tools like cast_vote and withdraw_votes_from_proposal.

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?

No guidance on when to use this tool versus alternatives (e.g., get_vote_info, get_vote_records). The description does not specify prerequisites or context for invocation.

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

get_market_dataA
Read-onlyIdempotent

Get detailed market data for a specific JustLend market: supply/borrow APY, TVL, utilization, collateral factor, price, and status. Use jToken symbol like 'jUSDT' or 'jTRX'.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesjToken symbol (e.g. 'jUSDT', 'jTRX') or jToken address
networkNoNetwork. Default: mainnet

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds specific return fields (APY, TVL, utilization, etc.) and confirms it's for a specific market, providing useful behavioral context without contradiction.

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 sentences: first states purpose and output, second provides usage hint. No unnecessary words, front-loaded with key 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, but description lists all returned fields. For a simple read-only data retrieval tool, the description provides enough context for an agent to understand inputs and outputs.

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% with parameter descriptions. Description adds meaning by explaining jToken symbol and giving examples, adding value beyond schema definitions.

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?

Description clearly states the tool retrieves detailed market data for a specific JustLend market, listing specific fields (supply/borrow APY, TVL, etc.) and giving a usage example (jToken symbol). This distinguishes it from siblings like get_all_markets.

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?

Explicitly says 'Use jToken symbol like 'jUSDT' or 'jTRX'' and implies it's for a single market detail, but does not explicitly state when not to use or mention alternatives.

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

get_moolah_dashboardA
Read-onlyIdempotent

JustLend V2 (Moolah) protocol overview: top vaults (APY, TVL) and top markets (borrow/supply rates). If address is provided, also includes the user's aggregated V2 position (total supply, borrow, health factor).

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoUser address to include V2 position summary. Default: configured wallet
networkNoNetwork. Default: mainnet
depositTokenNoFilter vaults and markets by deposit token symbol
collateralTokenNoFilter markets by collateral token symbol

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds scope details ('top' vaults/markets, optional user position) but does not provide significant additional behavioral context beyond what annotations convey.

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 sentences, front-loaded with the core purpose, no unnecessary words. Every sentence adds critical 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?

Without an output schema, the description does a good job listing the key fields returned (APY, TVL, borrow/supply rates, position details). However, it does not clarify what 'top' means (e.g., by TVL or APY), leaving a minor gap for the agent.

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% with each parameter described. The description adds value by explaining that the user address triggers inclusion of an aggregated V2 position with specific fields (total supply, borrow, health factor), which is not fully captured in the schema descriptions.

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 clearly states the tool provides a protocol overview of JustLend V2, including top vaults (APY, TVL) and top markets (borrow/supply rates), and optionally the user's aggregated position. It distinguishes itself from siblings like get_moolah_vaults and get_moolah_markets by offering a composite dashboard.

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 implies use for a quick overview but does not explicitly state when to use this tool versus calling individual endpoints. It lacks guidance on when not to use it or alternatives, leaving the agent to infer usage from context.

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

get_moolah_historyB
Read-onlyIdempotent

Get a user's JustLend V2 position history (net worth, supply, borrow over time) and recent transaction records (supply, borrow, repay, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoUser address. Default: configured wallet
networkNoNetwork. Default: mainnet
timeFilterNoHistory time range. Default: ONE_WEEK

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not reiterate safety. It adds value by specifying return types (position history and transaction records) but omits details like pagination or performance characteristics.

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 a single sentence that is front-loaded with the action and result. It is concise, but it could be slightly more efficient by removing redundant phrasing (e.g., 'position history' and 'transaction records' are clear).

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

Completeness3/5

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

With three optional parameters and no output schema, the description adequately explains what the tool returns but does not detail the structure of the response. Given the lack of output schema, more information on the return format would improve completeness, but the description meets minimal expectations.

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?

The input schema has 100% coverage with descriptions for all three optional parameters. The description does not add any additional meaning beyond what the schema already provides, so a 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 clearly states the tool retrieves a user's JustLend V2 position history and recent transaction records, using a specific verb ('Get') and resource ('history'). However, it does not explicitly differentiate from siblings like 'get_moolah_records' or 'get_moolah_user_position', which may overlap.

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 implies it is for historical data but provides no explicit guidance on when to use this tool versus alternatives. There are many similar 'get_*' tools, and the description lacks usage context, 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_moolah_liquidation_quoteA
Read-onlyIdempotent

Estimate the loan token cost to liquidate a position. Provide either seizedAssets (collateral to take) OR repaidShares (borrow shares to repay), not both. Returns the exact loan token amount needed. Use this before calling moolah_liquidate.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex)
repaidSharesNoBorrow shares to repay (raw units). Provide this OR seizedAssets.
seizedAssetsNoCollateral amount to seize (raw units). Provide this OR repaidShares.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it 'returns the exact loan token amount needed', which is helpful behavioral context. No contradiction with annotations.

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 concise sentences each adding distinct value: purpose, parameter usage, and pre-execution context. No wasted words, well front-loaded.

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?

Despite no output schema, the description states what is returned. For a simple estimation tool, this is sufficient. It could be improved by mentioning return type or precision, but overall it is adequate.

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 parameters are documented. The description adds crucial mutual exclusivity guidance ('Provide either...not both'), which goes beyond schema descriptions. This significantly aids correct invocation.

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 clearly states the verb 'estimate' and the resource 'loan token cost'. It distinguishes from the sibling tool 'moolah_liquidate' by noting it should be used before liquidation. The purpose is specific and unambiguous.

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 description explicitly tells when to use this tool ('Use this before calling moolah_liquidate') and provides parameter guidance (not both seizedAssets and repaidShares). While it doesn't explicitly list alternatives, the context of being a quote tool before execution is clear.

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

get_moolah_liquidation_recordsB
Read-onlyIdempotent

Historical liquidation events on Moolah — both bot-executed and public liquidations.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed). Default: 0
typeNoFilter by liquidator type
networkNoNetwork. Default: mainnet
pageSizeNoResults per page. Default: 20
debtTokenNoFilter by loan token symbol
collateralTokenNoFilter by collateral token symbol

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety. The description adds that it returns historical events but does not disclose pagination behavior, response format, or whether filters are cumulative. The description adds minimal value beyond annotations.

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, concise sentence with no redundant information. It is well-structured and immediately conveys the core purpose.

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

Completeness3/5

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

For a tool with six optional parameters and no output schema, the description is minimal. It does not explain pagination via page/pageSize, nor does it mention that the tool is read-only (though annotations cover that). The description could be more complete given the tool's complexity.

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 all parameters already have descriptions. The tool description does not add additional meaning, e.g., it does not clarify that the 'type' parameter corresponds to the two types mentioned in the description. 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 clearly states the tool retrieves historical liquidation events on Moolah, specifying both bot-executed and public liquidations. However, it does not differentiate from sibling tool 'get_liquidation_records', which may refer to a different protocol or context.

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?

No guidance is provided on when to use this tool versus alternatives such as 'get_moolah_pending_liquidations' or 'get_liquidation_records'. The description lacks any when-to-use or when-not-to-use instructions.

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

get_moolah_marketA
Read-onlyIdempotent

Get full details for a single Moolah market by its marketId (bytes32 hex). Includes APY, LLTV, utilization, total supply/borrow, and vaults supplying to this market. Use get_moolah_markets to find marketIds.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex, e.g. '0xabc...')

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds value by listing specific data fields (APY, LLTV, utilization, total supply/borrow, vaults) included in the output, which is not in annotations.

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 concise sentences: first defines purpose and scope, second offers sibling guidance. No unnecessary words.

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?

Tool is a single-item query with safe read operations; description lists included fields (APY, LLTV, etc.) to set expectations. No output schema needed given this clarity.

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 provides descriptions for both parameters. Description adds format example '0xabc...' for marketId and notes default network is mainnet, enhancing understanding beyond 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?

Clearly states verb 'Get', resource 'Moolah market', and identifier 'marketId'. Also distinguishes from sibling get_moolah_markets by specifying it retrieves full details for a single market.

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?

Explicitly recommends using get_moolah_markets to find marketIds before calling this tool, providing clear guidance for use. No explicit when-not, but the sibling reference is sufficient.

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

get_moolah_market_historyA
Read-onlyIdempotent

Time series of a V2 Moolah market's borrow/supply APY, utilization, and totals. Returns current totalBorrow/totalCollateral + borrowApy/supplyApy + list[] of historical points. Use marketId (bytes32 hex) from get_moolah_markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex, e.g. '0xabc...')

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare safe read-only behavior (readOnlyHint, idempotentHint, destructiveHint=false). The description adds value by specifying that it returns both current values (totalBorrow, totalCollateral, apy) and a list of historical points, offering behavioral detail beyond annotations.

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 two sentences long, front-loading the main function and then detailing return structure and usage hint. Every sentence contributes meaning without redundancy.

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?

Given the tool's complexity (current data plus time series) and no output schema, the description explains the return structure adequately. However, it omits details about the fields within the historical points list, which might be needed for full 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?

The input schema covers both parameters (network, marketId) with descriptions, achieving 100% coverage. The description adds context by noting that marketId should come from get_moolah_markets, enhancing the schema's meaning.

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 explicitly states it returns a 'Time series of a V2 Moolah market's borrow/supply APY, utilization, and totals', clearly identifying the verb (get), resource (V2 Moolah market history), and distinguishing it from sibling tools like get_moolah_market (current snapshot) or get_moolah_markets (list of markets).

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 description advises to 'Use marketId (bytes32 hex) from get_moolah_markets', guiding the user to first retrieve the marketId from a sibling tool. While it does not explicitly state when not to use this tool, it provides sufficient context for appropriate usage.

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

get_moolah_marketsA
Read-onlyIdempotent

List JustLend V2 (Moolah) markets with borrow/supply APY, LLTV, utilization, and liquidity. Markets are isolated — each has its own loan token, collateral token, oracle, and LLTV.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
pageSizeNoMax results. Default: 20
depositTokenNoFilter by loan token symbol (e.g. 'USDT')
collateralTokenNoFilter by collateral token symbol (e.g. 'TRX')

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate safe, read-only behavior. The description adds valuable context about the returned metrics (APY, LLTV, etc.) and the isolated nature of markets, going beyond what annotations provide. No contradictions.

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 sentences, no wasted words. First sentence states purpose and key data, second explains isolation. Front-loaded and efficient.

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?

The description covers the data returned and the unique isolation feature. It omits explicit mention of defaults (e.g., network defaults to mainnet, page size defaults to 20) but the schema descriptions cover those. For a simple list tool with good annotations, this is sufficiently complete.

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%; each parameter already has a description. The tool description does not add additional parameter-level details beyond the schema, so baseline score of 3 is appropriate.

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 clearly states the verb 'list', the resource 'JustLend V2 (Moolah) markets', and the specific data fields (borrow/supply APY, LLTV, utilization, liquidity). It also notes the distinctive isolation property, helping differentiate from siblings like get_moolah_market.

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 implies usage for listing markets with optional filters (network, pageSize, depositToken, collateralToken) but does not explicitly state when to use this tool versus alternatives or provide exclusionary guidance.

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

get_moolah_mining_accruingA
Read-onlyIdempotent

Get a user's accruing & settling V2 mining rewards across vaults. accruingUsd = current round still emitting; settlingUsd = previous round in the brief settlement window (miningStatus=2, currRewardStatus=1) — excluded otherwise so it doesn't double-count with already-published merkle airdrops. globalSettlementStatus=true means the backend reports any token in flux; treat per-token amounts as provisional.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds significant context: explains the meaning of 'accruingUsd' and 'settlingUsd', the settlement window conditions, the 'globalSettlementStatus' flag, and warns that per-token amounts are provisional. No contradictions with annotations.

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 dense yet concise, with no wasted words. It front-loads the core purpose and uses structured clauses to explain edge cases. Every sentence earns its place.

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 lack of output schema, the description fully explains the return values (accruingUsd, settlingUsd, globalSettlementStatus) and their provisional nature. Combined with strong annotations, the tool is well-documented for an agent.

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 both parameters are described in the schema. The description adds value by noting the defaults (address defaults to configured wallet, network defaults to mainnet) and the optional nature, which aids agent decision-making.

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 clearly states the tool retrieves accruing and settling V2 mining rewards across vaults, specifying the two types with precise definitions. It distinguishes itself from sibling tools like 'get_mining_rewards' by focusing on the V2 mining context and the settlement window logic.

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 description explains when to use the tool (to get accruing/settling rewards) and provides detailed accounting logic to avoid double-counting. However, it does not explicitly mention alternatives or state when not to use it, which would improve guidance.

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

get_moolah_mining_resolverA
Read-onlyIdempotent

Map every Moolah vault with active mining to its USDD / TRX APY split. Used by the dashboard to prefetch fire-icon eligibility in one round-trip. Vaults with zero mining APY are excluded from the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive. Description adds key behavioral detail: vaults with zero mining APY are excluded, and it returns APY splits. No contradictions.

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, each earning its place: purpose, usage, exclusion. Front-loaded with main action. No redundant words.

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

Completeness3/5

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

No output schema, and description only vaguely states 'APY split' without detailing return format. For a data-retrieval tool, more explicit return structure would improve completeness.

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 covers 100% of one parameter with clear description. Description adds no additional meaning beyond schema, so baseline score of 3 is appropriate.

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?

Description clearly states it maps every Moolah vault with active mining to USDD/TRX APY split. It distinguishes from siblings by specifying usage for dashboard fire-icon prefetch and explicitly mentions exclusion of zero APY vaults.

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?

States it is used by dashboard for prefetching fire-icon eligibility in one round-trip, providing clear context. Does not explicitly mention when not to use or alternatives, but the context is sufficient.

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

get_moolah_pending_liquidationsA
Read-onlyIdempotent

List Moolah positions eligible or approaching liquidation. riskLevel > 1.0 means the position is liquidatable right now. Use minRiskLevel=0.9 to find positions near the threshold.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed). Default: 0
networkNoNetwork. Default: mainnet
pageSizeNoResults per page. Default: 20
debtTokenNoFilter by loan token symbol (e.g. 'USDT')
maxRiskLevelNoMaximum risk level filter
minRiskLevelNoMinimum risk level (e.g. 0.9 for near-liquidatable, 1.0 for liquidatable now)
collateralTokenNoFilter by collateral token symbol (e.g. 'TRX')

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context by defining riskLevel > 1.0 as liquidatable and suggesting minRiskLevel=0.9 for near-threshold positions, which aids agent understanding of output semantics.

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 consists of two concise sentences without extraneous information. The purpose is front-loaded, and each sentence contributes essential meaning, achieving high efficiency.

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?

Given the tool has 7 optional parameters, no output schema, and annotations cover safety, the description adequately explains the core concept and usage. It lacks explicit mention of return format or pagination behavior, but this is not critical for a read-only list tool.

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% with parameter descriptions. The description adds meaning beyond schema by explaining the riskLevel concept and how minRiskLevel relates to liquidation threshold, providing an example value. Other parameters like page and network are already documented in 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?

The description clearly states the tool lists Moolah positions eligible or approaching liquidation, using specific verb 'list' and resource 'positions'. It distinguishes from siblings like liquidation records or quotes by focusing on pending positions, and explains the riskLevel threshold.

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 implies usage to find liquidatable or near-liquidatable positions and provides an example (minRiskLevel=0.9). However, it does not explicitly state when not to use this tool or compare it with alternatives like get_moolah_liquidation_records or moolah_liquidate.

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

get_moolah_pending_mining_periodsA
Read-onlyIdempotent

Get a user's claimable V2 mining airdrop rounds (already settled and merkle-published). Each period includes merkleIndex, index, per-token amounts (raw + decimal-shifted), the merkle proof, and a USD total. Feed a periodKey directly into claim_moolah_mining_period to submit the on-chain multiClaim. Set includeClaimed=true to also return rounds the indexer marks as already claimed (default false matches the rewards card behaviour).

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet
includeClaimedNoInclude rounds the backend marks as claimed. Default: false

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds behavioral details such as returning merkleIndex, index, amounts, proof, and USD total, and explains the includeClaimed parameter behavior. No contradictions.

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 three sentences, each earning its place: first sentence states purpose, second lists return fields, third explains usage and parameter. No superfluous text, and key information is front-loaded.

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?

Despite no output schema, the description compensates by listing return fields (merkleIndex, index, amounts, proof, total). It adequately covers the tool's behavior and parameter usage, though it doesn't mention pagination or error handling. Still sufficient for a read-only list tool.

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% with descriptions for all 3 parameters. The description adds extra meaning for includeClaimed (default false matches rewards card behaviour) and implies that address and network are optional. Baseline 3, plus 1 for additional context.

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 clearly states the verb (Get), resource (claimable V2 mining airdrop rounds), and scope (already settled and merkle-published). It distinguishes itself from siblings like claim_moolah_mining_period and get_moolah_mining_accruing by specifying the state of the rounds.

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 description explicitly tells the agent to feed periodKey into claim_moolah_mining_period for the next step, and explains when to use includeClaimed=true. While it doesn't explicitly list alternatives, the context from sibling tools and the focus on settled rounds provides clear usage context.

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

get_moolah_recordsA
Read-onlyIdempotent

Get a user's paginated V2 (Moolah) transaction history — supply, withdraw, borrow, repay, liquidate events. Distinct from get_moolah_history (which returns position curves + a small recent-txs preview) — this one is the full paginated record list. Works on both mainnet and nile.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoNoPage number, 1-indexed. Default: 1
addressNoUser address. Default: configured wallet
networkNoNetwork. Default: mainnet
pageSizeNoRecords per page. Default: 20

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, clearly indicating safe, non-destructive behavior. The description adds that the tool works on both mainnet and nile, and implies paginated behavior. This adds some context beyond annotations but does not discuss rate limits, result ordering, or empty result behavior, so a score of 3 is appropriate.

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 consists of two concise sentences. The first sentence clearly states the core purpose and event types. The second sentence provides a critical sibling distinction. No unnecessary words, front-loaded with essential information.

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

Completeness3/5

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

Given the lack of an output schema, the description does not describe the return format or fields of the transaction records. The parameter list is fully covered by the schema, but the agent receives no information about what data is returned per record. This gap reduces completeness. A score of 3 is appropriate for a simple list tool with good annotations.

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% with detailed parameter descriptions in the JSON schema. The description mentions 'paginated' which aligns with pageNo and pageSize, but adds no new semantic detail beyond what the schema already provides. Baseline 3 is correct as the schema 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 clearly states the tool's purpose: retrieving a user's paginated V2 Moolah transaction history for specific event types. It explicitly distinguishes from the sibling tool get_moolah_history by contrasting its full record list vs. position curves with a preview, which helps the agent select the correct tool.

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 description provides direct usage guidance by comparing to get_moolah_history, stating when to use this tool (full paginated records) and when to use the alternative (position curves + preview). It also mentions compatibility with mainnet and nile. However, it does not address other potentially related tools like get_lending_records or get_liquidation_records, slightly limiting completeness.

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

get_moolah_user_positionA
Read-onlyIdempotent

Get a user's position in a specific Moolah market: collateral, borrow amount, lltv, and risk ratio. risk close to 1.0 means the position is near liquidation — consider repaying or adding collateral.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoUser address. Default: configured wallet
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, confirming safe read. The description adds the behavioral insight that a risk ratio close to 1.0 indicates near liquidation, which goes beyond annotations. However, it does not disclose other traits like default parameter behavior or response structure.

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 sentence followed by a short actionable note. It is front-loaded with the purpose, no redundant words, and every sentence adds value.

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 read-only tool with 3 parameters fully documented in the schema and clear annotations, the description completes the context by listing output fields and risk interpretation. It could mention default values for address and network, but those are present in the schema, so overall it is nearly complete.

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 the schema fully documents the three parameters (address, network, marketId). The description does not add parameter-specific details beyond what the schema provides, resulting in a baseline score of 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?

The description specifies the verb 'Get', the resource 'user's position in a specific Moolah market', and lists the fields (collateral, borrow amount, lltv, risk ratio). It distinguishes from sibling tools like 'get_moolah_market' by focusing on a single user's position and risk 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?

The description explains when to use the tool: to check a position's risk ratio and consider repaying or adding collateral if near liquidation. It implicitly tells when not to use (e.g., for market-wide data), but lacks explicit exclusion or alternative tool references.

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

get_moolah_vaultA
Read-onlyIdempotent

Get detailed info for a single Moolah vault: APY, TVL, allocation, and the user's share balance if address is provided. vaultSymbol is 'TRX', 'USDT', or 'USDD'.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoUser address to include share balance. Default: configured wallet
networkNoNetwork. Default: mainnet
vaultSymbolYesVault symbol: 'TRX', 'USDT', or 'USDD'

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds minor behavioral context (address defaults to configured wallet), but does not disclose error handling or additional constraints. With strong annotations, this is adequate.

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 two sentences, front-loaded with the main purpose, and includes all essential details without waste. Every part earns its place.

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?

Given no output schema, the description lists the key return fields (APY, TVL, allocation, share balance). It is mostly complete for a single-vault detail tool, though it could mention additional fields like vault address or underlying asset. Annotations provide safety context.

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% with detailed descriptions for all three parameters. The description reinforces vaultSymbol values and the address's purpose, but adds minimal new information beyond the schema. Baseline 3 is appropriate.

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 clearly states the tool gets detailed info for a single Moolah vault, specifies the fields (APY, TVL, allocation, share balance), and lists allowed vaultSymbol values. It distinguishes this from sibling tools like get_moolah_vaults (plural) and get_moolah_vault_history.

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 implies usage for retrieving vault details, but does not explicitly state when to use this tool versus alternatives (e.g., get_moolah_vaults for all vaults). It mentions the optional address for share balance, but no exclusion or context for when not to use.

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

get_moolah_vault_historyA
Read-onlyIdempotent

Time series of a V2 Moolah vault's APY, TVL, and supply mining data. Returns currentSupplyUsd, supplyBaseApy, supplyMiningApy, and a historyRecords array. Use vaultAddress from get_moolah_vaults or chains.ts vault map.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
vaultAddressYesVault contract address (Base58 T...)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the description's burden is reduced. The description adds the return fields (currentSupplyUsd, supplyBaseApy, supplyMiningApy, historyRecords) but does not disclose behavioral traits like pagination, time range, or rate limits. It adds minimal value beyond annotations.

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 two sentences long with no wasted words. It efficiently states the purpose, lists return fields, and provides input sourcing guidance. It is front-loaded and every sentence serves a distinct purpose.

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

Completeness2/5

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

The tool has no output schema and returns a structured historyRecords array, yet the description does not explain the array's contents (e.g., fields, time format). The optional network parameter is mentioned in the schema but not in the description. While safety is annotated, return structure details are incomplete for a data retrieval tool.

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 input schema covers both parameters with descriptions (100% coverage). The description adds further meaning by specifying that vaultAddress should come from get_moolah_vaults or chains.ts, which is valuable context beyond the schema. This extra guidance justifies a score above baseline.

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 explicitly states the tool returns a 'time series of a V2 Moolah vault's APY, TVL, and supply mining data,' listing specific fields. It clearly distinguishes from sibling tools like get_moolah_history (likely for markets) and get_moolah_vault (single snapshot) by specifying 'time series' and the exact return data.

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 description provides clear guidance on where to obtain the vaultAddress (from get_moolah_vaults or chains.ts), which is a key input. However, it does not explicitly state when not to use this tool versus alternatives, such as get_moolah_vault_mining_apy for only APY data. The guidance is helpful but lacks exclusion criteria.

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

get_moolah_vault_mining_apyA
Read-onlyIdempotent

Get V2 mining APY for a single Moolah vault. Returns the USDD / TRX APY split and total (encoded as a fraction, e.g. 0.123 = 12.3%). enabled=true means the vault is active in mining and qualifies for the fire-icon UI hint.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
vaultAddressYesVault contract address (Base58 T...)

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive. The description adds value by explaining the return format (fraction encoding) and the meaning of the `enabled` flag for the UI hint. This enriches the understanding without contradicting annotations.

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 two sentences, front-loaded with the purpose, and every part adds value. No unnecessary words.

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 simple read tool with one required param and no output schema, the description covers return values and the enabled flag. It lacks mention of network default behavior or update frequency, but these are minor gaps given the tool's simplicity.

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 the baseline is 3. The description does not add additional parameter context beyond the schema, such as explaining the `network` default or providing examples.

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 clearly states the tool gets V2 mining APY for a single Moolah vault, and specifies the return values (USDD/TRX split and total). It distinguishes from sibling tools like `get_moolah_vault` by targeting a specific metric.

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 implies usage for retrieving mining APY of a single vault, but does not explicitly mention when to use this vs. alternatives like `get_moolah_vault` or `get_mining_rewards`. No when-not-to-use guidance is provided.

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

get_moolah_vaultsA
Read-onlyIdempotent

List all JustLend V2 (Moolah) vaults with APY, TVL, and underlying token. Vaults are ERC4626 — deposit tokens to earn auto-compounding yield allocated across Moolah markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
depositTokenNoFilter by deposit token symbol (e.g. 'USDT', 'TRX')

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, etc., so the description adds context about vault type (ERC4626) and yield mechanism but does not contradict annotations. Additional behavioral details (e.g., response shape, rate limits) are absent but not critical given annotations.

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 sentences, front-loaded with core functionality and data fields. No redundant text or padding.

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?

Given the simple list operation with optional parameters and no output schema, the description is largely complete. It explains the vault type and yield purpose. Minor omissions: no mention of pagination or response structure, but acceptable for this 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?

Schema descriptions cover 100% of parameters (network, depositToken). The tool description adds no extra detail beyond what the schema provides, such as default values or filter behavior. Baseline 3 is appropriate.

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 clearly states the tool lists all JustLend V2 (Moolah) vaults with specific data fields (APY, TVL, underlying token). It also distinguishes from sibling tools like 'get_moolah_vault' by indicating 'list all' and providing context about ERC4626 vaults.

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?

No explicit guidance on when to use this tool versus alternatives (e.g., 'get_moolah_vault', 'get_moolah_vault_history'). The description implies it's for a broad overview, but no exclusions or when-not-to-use advice.

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

get_proposal_listA
Read-onlyIdempotent

Get the list of JustLend DAO governance proposals. Returns proposals with their status (Active, Passed, Defeated, etc.), vote counts, and details. Sorted by newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of proposals to return. Default: 10. Use 0 for all.
networkNoNetwork. Default: mainnet

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that the tool returns proposals sorted by newest first, but does not mention any additional behavioral traits beyond what annotations provide. 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.

Conciseness5/5

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

The description is three concise sentences, front-loaded with the main purpose, and contains no redundant or irrelevant information. Every sentence adds value.

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

Completeness3/5

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

While the description outlines the kind of data returned (status, vote counts, details), it lacks specifics such as field names, structure, or pagination behavior. Given no output schema exists, more detail would improve completeness. Annotations cover safety aspects.

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?

Input schema coverage is 100% with descriptions for both parameters (limit and network). The tool description does not add any additional meaning beyond the schema's parameter descriptions, so baseline score of 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?

The description clearly states the verb 'Get' and the resource 'list of JustLend DAO governance proposals', and specifies what is returned (status, vote counts, details) and ordering (newest first). It distinguishes from sibling tools with different purposes.

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 does not explicitly state when to use this tool versus alternatives, nor does it provide when-not-to-use guidance. However, the purpose is straightforward and there are no close sibling tools competing for the same task, so the usage is implicitly clear.

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

get_return_rental_infoA
Read-only

Get estimated refund info for returning/canceling an energy rental. Shows how much TRX would be refunded (estimatedRefundTrx), remaining rent, security deposit, usage rental cost, unrecovered energy, and daily rent cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
renterAddressNoRenter address. Default: configured wallet
receiverAddressYesReceiver address

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false, indicating safe read operation. The description adds value by listing returned fields (estimatedRefundTrx, remaining rent, etc.), providing behavioral context beyond annotations. However, it does not disclose prerequisites or side effects, but these are not needed for a read-only tool.

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, well-structured sentence that front-loads the purpose and lists key output fields. Every word contributes value; no wasted text.

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 tool's simplicity (3 parameters, no output schema, read-only), the description sufficiently explains what the tool returns. It covers all necessary information for an agent to understand and invoke the tool correctly.

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 the description does not need to detail parameters. It adds no new meaning beyond the schema, which already describes the three parameters. The baseline of 3 is appropriate given high coverage.

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 clearly states 'Get estimated refund info for returning/canceling an energy rental,' identifying the resource (energy rental) and the specific information provided. It distinguishes from siblings like 'return_energy_rental' (which performs the return) and other 'get_*' tools.

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 implies usage when considering returning or canceling a rental but does not explicitly specify when not to use or mention alternatives among siblings. It lacks explicit context on exclusion or comparison with similar tools.

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

get_strx_accountA
Read-only

Get user's sTRX staking account info including staked amount, income, claimable rewards, withdrawn amount, and rental energy amount.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoAddress to query. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, so the agent knows this is a safe read operation. Description adds no behavioral context beyond listing output fields; it doesn't disclose rate limits, auth needs, or other traits. No contradiction with annotations.

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?

Single sentence with clear verb and list of included fields. No fluff or redundant 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?

Despite no output schema, the description fully enumerates the key fields returned (staked amount, income, claimable rewards, withdrawn amount, rental energy amount). For a read-only tool with good annotations, this is sufficient for an AI agent to understand what it will receive.

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%: both parameters (address, network) have descriptions covering pattern, default, and optionality. The description adds no extra parameter meaning beyond listing output fields, so it meets baseline but does not exceed.

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?

Description clearly states it retrieves sTRX staking account info and enumerates specific fields (staked amount, income, claimable rewards, withdrawn amount, rental energy amount). This distinguishes it from siblings like get_strx_balance (balance only) and get_strx_dashboard (likely dashboard summary).

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?

No explicit when-to-use or when-not-to-use guidance is provided. The description implies use for detailed staking account info, but with many related sibling tools, some differentiation would help agents choose correctly.

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

get_strx_balanceA
Read-only

Get the sTRX token balance for an address.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoAddress to check. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and no destructive effects. The description adds no new behavioral context beyond what annotations provide, e.g., no mention of default address behavior or network fallback.

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 concise sentence with no extraneous words, efficiently conveying the tool's purpose.

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 simple read-only tool with good annotations, the description is adequate but could mention return value format. Overall, it sufficiently covers the essential context.

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 description does not add meaningful information beyond the schema. The phrase 'for an address' aligns with the address parameter but offers no additional detail.

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 clearly states the action ('Get'), the resource ('sTRX token balance'), and the scope ('for an address'), distinguishing it from sibling tools like get_trx_balance and get_token_balance.

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?

No guidance on when to use this tool versus alternatives (e.g., get_trx_balance, get_wallet_balances). The usage context is implied but not explicit, lacking exclusions or recommendations.

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

get_strx_recordsA
Read-onlyIdempotent

Get a user's sTRX staking history: stake, unstake, withdraw (after unbonding), and sTRX transfers. Each record has opType (1-6) and a human-readable opName. Paginated. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed. Default: 1
addressYesTRON address. Default: configured wallet
networkNoMust be 'mainnet'. Default: mainnet
pageSizeNoRecords per page. Default: 20

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds transparency about pagination and network restriction, going beyond 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 a single, well-structured sentence that front-loads the core action and lists record types. It is efficient, though adding line breaks could improve readability.

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

Completeness3/5

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

Given the lack of output schema, the description provides partial context by mentioning opType and opName, but it does not fully describe the paginated response structure or complete list of return fields, leaving room for ambiguity.

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% with detailed parameter descriptions. The description mentions pagination but does not add new parameter semantics beyond what the schema provides, so baseline 3 is appropriate.

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?

Clearly states the tool retrieves a user's sTRX staking history, enumerating specific record types (stake, unstake, withdraw, transfers) and distinguishing itself from sibling tools like get_strx_balance or get_strx_account by focusing on historical records.

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?

Explicitly notes the tool is Mainnet-only, providing a clear usage constraint. However, it does not explicitly contrast with alternative tools for similar tasks, though the sibling context makes the distinction reasonably clear.

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

get_token_balanceA
Read-onlyIdempotent

Get TRC20 token balance for an address. You can pass either a token symbol (e.g. 'USDD', 'USDT', 'ETH') or a contract address. When using a symbol, it resolves to the correct contract address from JustLend markets automatically. IMPORTANT: Always prefer using token symbols over raw addresses to avoid using outdated/wrong contract addresses. For example, use 'USDD' instead of a raw address — the old USDD (TPYmHEhy5n8TCEfYGqW2rPxsghSfzghPDn) is deprecated. The returned balance is already formatted in human-readable token units (decimals already applied). Do NOT divide the balance by decimals again.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoToken symbol (e.g. 'USDD', 'USDT', 'TRX', 'ETH', 'BTC', 'SUN', 'JST', 'WIN', 'BTT', 'NFT', 'TUSD', 'WBTC', 'USD1', 'wstUSDT', 'sTRX'). Preferred over tokenAddress.
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet
tokenAddressNoTRC20 token contract address. Use 'token' parameter with a symbol name instead when possible.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnly, openWorld, idempotent. The description adds valuable behavioral details: automatic resolution of symbols to contract addresses via JustLend markets, and that the balance is pre-formatted (decimals applied) so agents must not re-divide. This exceeds annotation-only information.

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?

Four short sentences that front-load the purpose and quickly deliver key usage warnings. Every sentence adds value; no fluff.

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?

Despite no output schema, the description explains return format (formatted balance) and critical usage nuances. It covers the main edge case (deprecated addresses) and defaults. Slightly incomplete on error handling for invalid symbols, but adequate for the tool's simplicity.

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% with good descriptions. The description adds extra semantics: the preference for symbol over address, the auto-resolution mechanism, and the formatting behavior. This provides context beyond the raw 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?

The description clearly states 'Get TRC20 token balance for an address' with a specific verb and resource. It distinguishes from sibling tools (e.g., get_trx_balance, get_strx_balance) by focusing on TRC20 tokens. The explanation of symbol vs. address resolution adds clarity.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'Always prefer using token symbols over raw addresses' with a concrete example and rationale about deprecated addresses. This tells the agent when and how to use the parameters correctly.

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

get_user_energy_rental_ordersA
Read-only

Get a user's energy rental orders from JustLend. Can filter by role: 'renter' (orders where user is renting out), 'receiver' (orders where user receives energy), or 'all'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed). Default: 0
typeNoFilter by role. Default: all
addressNoAddress to query. Default: configured wallet
networkNoNetwork. Default: mainnet
pageSizeNoResults per page. Default: 10

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description does not need to emphasize safety. It adds context about the filtering capability but no further behavioral traits beyond what annotations provide.

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 concise sentences with front-loaded purpose; no wasted words. The description efficiently conveys the core functionality and filtering options.

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?

Given the 5 parameters (all optional, all described in schema), the description adequately covers the main purpose and the key filter. Pagination and network defaults are implied by schema, so no major gaps for a read-only tool.

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%, but the description adds meaningful clarification for the 'type' parameter by explaining the roles 'renter' and 'receiver', which is not fully explicit in the schema enum descriptions.

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 clearly states the verb 'Get', the resource 'user's energy rental orders', and the source 'JustLend'. It also explains the filtering by role, distinguishing it from sibling tools like get_energy_rental_dashboard.

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 description implies when to use this tool (to get a user's rental orders filtered by role) but does not explicitly contrast it with alternatives like get_energy_rental_records or get_energy_rental_params.

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

get_user_vote_statusA
Read-onlyIdempotent

Get a user's voting status across all governance proposals. Shows which proposals the user has voted on, their vote amounts (for/against/abstain), and which proposals have withdrawable votes.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds specific behavioral details: it shows voted proposals, vote amounts, and withdrawable votes. This provides context beyond the annotations, such as the scope of data returned. However, it does not mention any limitations or potential issues with the default network parameter.

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 concise and front-loaded: a single sentence stating the main purpose, followed by a brief list of what is shown. No unnecessary words or repetition. It efficiently communicates the tool's functionality.

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?

Given that there is no output schema, the description adequately explains what the tool returns (proposals, vote amounts, withdrawable votes). The context signals show no nested objects, so the output is likely simple. The description is complete for a read-only query tool with two optional parameters.

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?

The input schema has 100% description coverage for both parameters (address and network), including default behaviors. The tool description does not add any new information about the parameters beyond what the schema already provides. Therefore, a score of 3 is appropriate, as the description does not enhance understanding of 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?

The description clearly identifies the tool's purpose: get a user's voting status across all governance proposals. It specifies exactly what information is returned (which proposals voted on, vote amounts for/against/abstain, withdrawable votes). This distinguishes it from siblings like 'get_vote_info' or 'get_vote_records' which may have different scopes.

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?

No explicit guidance is given on when to use this tool versus alternatives like 'get_vote_records' or 'get_locked_votes'. The description implies it's a comprehensive overview, but does not state when not to use or scenarios where other tools are better suited.

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

get_vote_infoA
Read-onlyIdempotent

Get voting power info for a user: JST wallet balance, available (surplus) votes, total deposited votes, and votes currently cast in proposals. This is the key tool to check before voting — it shows how many votes are available to use.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoTRON address. Default: configured wallet
networkNoNetwork. Default: mainnet

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds no additional behavioral traits beyond stating what data is returned, which is already known from annotations.

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 sentences concisely convey the tool's purpose and use case. No redundant information; front-loaded with what it does and ends with usage advice.

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?

Lists four specific return values (JST balance, available votes, total deposited, cast votes) which covers the main outputs. No output schema exists, but the description provides sufficient detail for a read-only info tool. Could mention pagination or rate limits, but not essential.

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 covers both parameters with descriptions (address: TRON address default configured wallet; network: Network default mainnet). Description does not add extra parameter information beyond the schema, so baseline score 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 clearly states the tool retrieves voting power info including JST balance, available votes, deposited votes, and cast votes. It positions itself as the key tool to check before voting, distinguishing it from siblings like get_user_vote_status but not explicitly naming alternatives.

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?

Explicitly says 'This is the key tool to check before voting' providing clear when-to-use advice. Does not mention when not to use or provide alternatives, but the context is sufficient.

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

get_vote_recordsA
Read-onlyIdempotent

Get a user's governance voting history: get_vote (JST → WJST deposits), votes cast for/against proposals, vote withdrawals, and JST conversions back. Each record has opType (1-6), opName, amount, and proposalId (for votes and withdrawals). Use get_user_vote_status for real-time current voting power. Mainnet-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-indexed. Default: 1
addressYesTRON address. Default: configured wallet
networkNoMust be 'mainnet'. Default: mainnet
pageSizeNoRecords per page. Default: 20

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive. Description adds value by detailing the record structure (opType, opName, amount, proposalId) and operational context (mainnet-only). No contradictions.

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 concise sentences: first enumerates record types, second provides field details and an alternative tool. No redundant information, perfectly front-loaded.

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 no output schema, description provides essential return structure (fields per record). Mentions mainnet-only. Could explain pagination behavior, but parameters address that. Overall sufficiently complete for a read-only query 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?

Schema covers 100% of parameters with descriptions, so baseline is 3. Description does not add parameter-specific info but indirectly clarifies output structure. Sufficient given schema completeness.

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 clearly states the tool retrieves governance voting history, listing specific transaction types (deposits, votes, withdrawals, conversions) and distinguishes it from the real-time status tool. It specifies the verb 'Get' and the resource 'voting history', making purpose unambiguous.

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?

Explicitly advises using 'get_user_vote_status' for real-time current voting power, providing an alternative for a related but distinct use case. Also notes 'Mainnet-only' constraint. Could mention more siblings but current guidance is clear and helpful.

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

get_wallet_addressA
Read-onlyIdempotent

Get the active wallet address. Returns browser wallet address if in browser mode, agent-wallet address if agent mode is selected, or a first-use wallet selection guide if no wallet mode has been chosen yet.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context: conditional return values based on wallet mode, and a guide when no mode is selected. No contradictions.

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, clear sentence that efficiently conveys all necessary information. It is front-loaded and concise without any redundancy.

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 0-parameter tool with comprehensive annotations, the description fully covers the tool's behavior, including the three possible return scenarios. No output schema exists, but the description adequately explains the return values.

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?

There are no parameters, so schema coverage is 100%. The description adds no parameter information, but given zero parameters, this is acceptable. Baseline 4 for 0 params.

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 clearly states the tool gets the active wallet address, specifying different return values based on wallet mode (browser, agent, or none). It distinguishes itself from sibling tools like get_wallet_balances or list_wallets by focusing on the active address.

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

Usage Guidelines5/5

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

The description explicitly outlines when to use the tool (to get the current wallet address) and the behavior in different modes, including a guide when no mode is set. It implicitly guides the agent to use this tool for the active address, while alternatives exist for balances or listing.

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

moolah_borrowA
Destructive

Flexible Moolah borrow entry point. Provide collateralAmount only → supply collateral without borrowing. Provide borrowAmount only → borrow against existing collateral. Provide both → supply collateral then borrow in two sequential transactions. Collateral must cover the borrow at the market's LLTV or the borrow tx reverts.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex) — from get_moolah_markets
borrowAmountNoLoan token amount to borrow (e.g. '500' USDT). Omit to skip.
collateralAmountNoCollateral to supply first (e.g. '10000' TRX). Omit to skip.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate destructive=true, readOnly=false. The description adds beyond this by detailing the sequential transaction behavior when both amounts are provided and the LLTV constraint. No contradiction with 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 concise, with four sentences front-loaded with purpose. No wasted words, though slightly more structure (e.g., bullet list) could improve scannability.

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?

Given the complexity of the tool (4 params, no output schema, destructive), the description covers the essential: modes, constraints, and revert behavior. Missing return value info, but acceptable.

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%, baseline 3. The description adds significant meaning by explaining how collateralAmount and borrowAmount interact (one, the other, or both), and the LLTV condition. This goes beyond the schema's 'omit to skip' descriptions.

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 clearly states it's a flexible borrow entry point for Moolah, explicitly describing three usage modes (collateral only, borrow only, both). This differentiates it from siblings like 'borrow' and 'moolah_supply_collateral'.

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 description provides clear when-to-use guidance by explaining the three parameter combinations and their effects. It implicitly differentiates from siblings, but does not explicitly state when not to use or name alternatives.

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

moolah_liquidateA
Destructive

Liquidate an undercollateralized Moolah position. You must hold the loan token and have approved it via approve_liquidator_token. Provide EITHER seizedAssets (collateral to seize) OR repaidShares (borrow shares to repay), not both. Use get_moolah_liquidation_quote first to estimate the required loan token amount.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
borrowerYesAddress of the borrower to liquidate (Base58)
marketIdYesMarket ID (bytes32 hex)
repaidSharesNoBorrow shares to repay (raw). Provide this OR seizedAssets.
seizedAssetsNoCollateral units to seize (raw). Provide this OR repaidShares.

TDQS

A4.6/5.0
Behavior5/5

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

The description adds significant behavioral context beyond the destructiveHint annotation: it requires holding and approving a loan token, specifies mutual exclusivity of seizedAssets and repaidShares, and suggests a prior step. This aligns with the tool's destructive nature and provides critical usage constraints.

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 four concise sentences, front-loading the main action. Each sentence serves a purpose: action, prerequisites, parameter rule, and recommendation. No unnecessary words.

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?

The description covers the core action, prerequisites, parameter constraints, and a helpful recommendation. It does not describe the return value, but given no output schema, this is acceptable. The overall context is sufficient for a mutation tool.

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, baseline is 3. The description adds value by explicitly stating the mutual exclusivity of seizedAssets and repaidShares and clarifying their roles, which is not fully captured in the schema descriptions. This helps the agent choose correctly.

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 clearly states the tool's purpose: 'Liquidate an undercollateralized Moolah position.' It uses a specific verb and resource, distinguishing it from sibling tools like moolah_borrow or moolah_repay.

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 description provides necessary prerequisites (must hold loan token and approve via approve_liquidator_token) and recommends using get_moolah_liquidation_quote first. It does not explicitly mention when not to use or alternatives, but the guidance is sufficient for the tool's context.

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

moolah_repayA
Destructive

Repay a Moolah market loan. Use amount='max' to repay the full outstanding borrow (uses shares math for exact settlement). For TRC20 loan tokens, call approve_moolah_proxy first. For TRX loans, TRX is sent directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesLoan amount to repay, or 'max' for full repayment
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex)

TDQS

A4.1/5.0
Behavior4/5

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

Description adds behavior beyond annotations: mentions 'shares math for exact settlement' and token-specific prerequisites. Annotations already indicate destructiveHint=true, but description provides helpful context without contradiction.

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 focused sentences covering purpose, special value, and token-specific details. No wasted words, front-loaded with the primary action.

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?

Adequately complete for the tool's complexity: covers basic operation, special values, and token-specific steps. Lacks details on return value or transaction confirmation, but acceptable given typical patterns.

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 covers all parameters (100% coverage). Description adds value by explaining 'max' usage and prerequisite workflow for TRC20 tokens, augmenting the schema's type/pattern constraints.

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?

Description clearly states 'Repay a Moolah market loan' with specific verb and resource. It distinguishes from similar tools like 'moolah_borrow' and 'supply', but does not explicitly differentiate from the generic 'repay' sibling, which slightly reduces clarity.

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?

Provides clear instructions: use 'max' for full repayment, and prerequisites for TRC20 vs TRX loans. Does not mention when not to use or alternatives, but the context is sufficient for correct usage.

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

moolah_supply_collateralA
Destructive

Supply collateral into a Moolah market to enable borrowing. For TRC20 collateral, call approve_moolah_proxy first. For TRX collateral, TRX is sent directly with no prior approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of collateral to supply (e.g. '10000' for 10000 TRX)
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex) — from get_moolah_markets

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description adds value by explaining token-specific behaviors (approval needed for TRC20, direct for TRX). However, it does not disclose return values, side effects, or error conditions, leaving gaps in behavioral 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?

Two concise sentences with no fluff. The first sentence states the core action and purpose; the second adds critical conditional guidance. Front-loaded with the verb and resource.

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?

Covers main use case and token-specific prerequisites adequately for a write tool with good annotations. However, it lacks mention of transaction output, gas implications, or what happens if collateral is already supplied, so not fully complete.

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 description adds context beyond schema: provides an example for amount ('10000' for 10000 TRX) and notes that marketId comes from get_moolah_markets. This aids understanding but does not elaborate on format or constraints beyond 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?

Description clearly states the verb 'Supply collateral' and resource 'Moolah market', with the specific purpose of enabling borrowing. It distinguishes from sibling tools like approve_moolah_proxy and moolah_withdraw_collateral by mentioning prerequisites for different token types.

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?

Provides clear when-to-use context (to enable borrowing) and conditional guidance: for TRC20, call approve_moolah_proxy first; for TRX, no prior approval. This helps the agent understand prerequisites but does not explicitly state when not to use or mention alternative tools.

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

moolah_vault_depositA
Destructive

Deposit assets into a Moolah ERC4626 vault to earn yield. For TRC20 vaults (USDT, USDD), call approve_moolah_vault first. Returns vault shares representing your deposit.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of underlying to deposit (e.g. '1000' for 1000 USDT)
networkNoNetwork. Default: mainnet
vaultSymbolYesVault symbol: 'TRX', 'USDT', or 'USDD'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true, readOnlyHint=false. Description adds value by stating it returns vault shares, which explains the outcome beyond annotations. 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.

Conciseness5/5

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

Two sentences, no redundant information. First sentence gives purpose, second adds prerequisite and return value. Efficient and well-structured.

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 3 parameters, no output schema, and annotations present, description covers purpose, prerequisite, and return value adequately for tool selection and 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 100%, but description adds context by naming specific TRC20 vault symbols (USDT, USDD) for vaultSymbol, aiding parameter understanding beyond basic 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?

Description clearly states 'Deposit assets into a Moolah ERC4626 vault to earn yield' with specific verb and resource. Distinguishes from sibling tools like 'approve_moolah_vault' by noting prerequisites for TRC20 vaults.

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?

Explicitly instructs to call 'approve_moolah_vault' first for TRC20 vaults (USDT, USDD), providing clear when-to-use guidance. Lacks explicit comparison with other deposit-related siblings, but context is sufficient.

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

moolah_vault_redeemA
Destructive

Redeem vault shares to receive underlying assets. Use shares='max' to redeem all shares. No approval needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sharesYesNumber of shares to redeem, or 'max' for all shares
networkNoNetwork. Default: mainnet
vaultSymbolYesVault symbol: 'TRX', 'USDT', or 'USDD'

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, so the description adds the useful context 'No approval needed.' It does not contradict annotations. However, it could elaborate on the effect on vault state or the outcome of redemption.

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 concise sentences with zero wasted words. The first states the core purpose, the second provides a key usage hint. Fully earns its length.

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

Completeness3/5

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

While the description is clear, it lacks details about the underlying assets or the post-redemption process (e.g., where assets go). Given no output schema, more completeness would be beneficial for a DeFi tool.

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% with descriptions for all parameters. The description adds value by explaining the 'max' option for 'shares' and implying default for 'network'. This enhances the schema information.

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 clearly states the action ('Redeem'), the resource ('vault shares'), and the result ('receive underlying assets'). It distinguishes from sibling tools like moolah_vault_deposit and moolah_vault_withdraw by focusing on the redemption of shares.

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?

Provides a specific usage tip ('Use shares='max' to redeem all shares') and states that no approval is needed. However, it does not explicitly compare with alternatives or mention when not to use this tool.

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

moolah_vault_withdrawA
Destructive

Withdraw underlying assets from a Moolah vault by specifying the asset amount. Use amount='max' to withdraw everything. No approval needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of underlying to withdraw, or 'max' for full withdrawal
networkNoNetwork. Default: mainnet
vaultSymbolYesVault symbol: 'TRX', 'USDT', or 'USDD'

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true (mutation) and readOnlyHint=false. The description adds one behavioral trait ('No approval needed'), which is helpful but does not cover other aspects like side effects, success conditions, or error handling. It adds value beyond annotations, but not extensively.

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 sentences, front-loaded with the main action, no wasted words. The key tip about 'max' is included efficiently.

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?

The tool has 3 parameters and no output schema; the description covers the core functionality and a key usage tip. It relies on the schema for parameter details (vaultSymbol, network) and annotations for safety profile, which is acceptable. A brief note on side effects (e.g., vault balance update) would make it complete.

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?

All three parameters have descriptions in the schema (100% coverage), so the description adds no new parameter-specific semantics beyond reinforcing the 'max' usage. The baseline is 3, and no additional value is provided.

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 clearly states that the tool withdraws underlying assets from a Moolah vault, specifying the action (withdraw), resource (Moolah vault), and the asset type (underlying assets). It also highlights the special value 'max' for full withdrawal, which distinguishes it from sibling tools like moolah_vault_deposit.

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 mentions 'No approval needed,' which is a useful precondition, but it does not explicitly guide when to use this tool over alternatives like withdraw_all or moolah_vault_redeem. Given the many sibling tools, clearer usage differentiation would improve the score.

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

moolah_withdraw_collateralA
Destructive

Withdraw collateral from a Moolah market. Use amount='max' to withdraw all collateral (only allowed when no active borrows). Withdrawing too much while borrowing will revert — check health factor first.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of collateral to withdraw, or 'max' for all (requires no active borrows)
networkNoNetwork. Default: mainnet
marketIdYesMarket ID (bytes32 hex)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true, but the description adds valuable behavioral context: 'max' requires no active borrows, and withdrawing too much while borrowing will revert. It also suggests checking health factor. No contradictions with annotations.

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 extremely concise: two sentences. The first sentence defines the core purpose, and the second provides critical usage constraints. No unnecessary words or repetition.

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?

Given the tool's complexity (3 parameters, destructive hint, no output schema), the description adequately covers usage, special cases, and safety warnings. It could optionally mention return values (e.g., transaction hash), but not necessary for a withdraw action.

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% with descriptions for all three parameters (amount, network, marketId). The description adds meaning by explaining the special value 'max' for amount and the condition for its use, going beyond the schema's pattern and description.

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 clearly states the action 'withdraw collateral from a Moolah market' and distinguishes from sibling tools like moolah_supply_collateral, moolah_borrow, etc. The special case of using 'max' and the condition of no active borrows further clarify the tool's specific purpose.

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 description provides clear guidance on when to use (withdrawing collateral) and when not (with active borrows if not using max, or withdrawing too much while borrowing). It advises checking health factor first, but does not explicitly name alternative tools for withdrawing from other contexts (e.g., generic withdraw).

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

rent_energyA
Destructive

Rent energy from JustLend for a specified receiver address. Automatically calculates TRX needed based on energy amount. For NEW rentals: durationHours is required (minimum 1 hour), minimum energy is 300,000. For RENEWALS (existing active rental to the same receiver): durationHours is NOT needed — the remaining duration from the existing order is used automatically. Minimum energy for renewal is 50,000. Pre-checks: rental not paused, amount within limits, sufficient TRX balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
energyAmountYesAmount of energy to rent (minimum 300,000 for new rental, minimum 50,000 for renewal)
durationHoursNoRental duration in hours (minimum 1 hour). Required for new rentals. Ignored for renewals (uses existing order's remaining duration).
receiverAddressYesAddress that will receive the energy

TDQS

A4.5/5.0
Behavior5/5

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

The description reveals behavior beyond annotations: automatic TRX calculation, pre-checks, and differentiation between new and renewal behavior. Annotations indicate destructiveHint=true and readOnlyHint=false, which are consistent. The description adds valuable context without 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?

The description is a single paragraph but flows logically: action, then new/renewal rules, then pre-checks. It is concise with no filler. However, breaking into bullet points could improve readability, but not required.

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

Completeness3/5

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

The description covers inputs and behavior well but does not mention output or return format. Since there is no output schema, the agent must infer what the tool returns (e.g., transaction result). This is a gap for a tool that modifies state.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant meaning: explains energyAmount minimums based on rental type, and clarifies durationHours conditional behavior. This goes beyond the schema's static descriptions, providing actionable semantics for the AI agent.

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 clearly states 'Rent energy from JustLend for a specified receiver address.' It specifies the verb (rent), resource (energy), and platform (JustLend). It also distinguishes between new rentals and renewals, adding specificity. While it does not directly compare to siblings, the purpose is unambiguous.

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 description provides explicit guidelines: durationHours is required for new rentals, optional for renewals; minimum energy amounts differ (300,000 new, 50,000 renewal). It mentions pre-checks (not paused, within limits, sufficient TRX). However, it does not state when not to use the tool or suggest alternatives, which would elevate it to a 5.

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

repayA
Destructive

Repay borrowed assets to a JustLend market. For TRC20 markets, must have approved underlying first. Use amount='max' to repay the full outstanding borrow. Typical cost: 80,00090,000 energy + 280320 bandwidth (TRX costs less than TRC20).

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount to repay (e.g. '500'), or 'max' for full repayment
marketYesjToken symbol (e.g. 'jUSDT', 'jTRX')
networkNoNetwork. Default: mainnet

TDQS

A4.4/5.0
Behavior4/5

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

Discloses cost (energy/bandwidth) and approval requirements, adding value beyond annotations. Does not contradict destructiveHint=true. Cost info is useful for agent planning.

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 concise sentences, front-loaded with purpose. No redundant words. Every sentence adds meaningful 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?

Covers purpose, prerequisite, special value, and cost. Lacks details on return value or side effects, but annotations already indicate destructive nature. Adequate for this complexity.

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?

Adds context to parameters: clarifies amount 'max' usage, and links market to TRC20 approval. Schema coverage is 100%, so baseline is 3; the additional prerequisite info raises the score.

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?

Clearly states the action ('repay borrowed assets') and the target ('JustLend market'), distinguishing it from sibling 'moolah_repay'. Includes specific details like approval prerequisite for TRC20.

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?

Describes when to use (repaying borrowed assets), prerequisite (approval for TRC20), and special value 'max'. Lacks explicit comparison to alternatives, but context is clear given sibling names.

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

stake_trx_to_strxA
Destructive

Stake TRX via JustLend to receive sTRX tokens. sTRX earns staking rewards (vote APY + energy rental income). Pre-checks: sufficient TRX balance for staking amount + gas.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of TRX to stake (human-readable decimal string, e.g. '1' or '10.5')
networkNoNetwork. Default: mainnet

TDQS

A4.2/5.0
Behavior4/5

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

Description adds behavioral details beyond annotations: staking via JustLend, rewards (vote APY + energy rental income), pre-checks. No contradiction with annotations.

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 focused sentences plus a pre-check note, front-loaded with main action. No wasted words.

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?

Covers main action, prerequisites, and rewards. No output schema, but return value is implied (sTRX tokens). Could mention that it returns transaction hash or similar, but not critical.

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 description only adds generic context about balance checks. Does not elaborate on network default or value format beyond 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?

Clear verb 'Stake', resource 'TRX', outcome 'receive sTRX tokens'. Distinguishes from siblings like 'unstake_strx'. Mentions rewards.

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?

Provides explicit pre-checks (sufficient TRX balance for amount + gas) and states the action's purpose. Lacks when-not-to-use but context is clear given siblings.

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

transfer_trxA

Transfer TRX to another TRON address. Checks balance sufficiency (including gas) before sending. Typical cost: ~0 energy + ~270 bandwidth.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient TRON address (Base58 T... format)
amountYesAmount of TRX to transfer (e.g. '1', '10.5')
networkNoNetwork. Default: mainnet

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare non-read-only and non-destructive behavior. The description adds valuable behavioral context: it checks balance sufficiency (including gas) before sending and provides typical cost (~0 energy + ~270 bandwidth). This goes beyond annotations and helps the agent understand side effects.

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 sentences with zero waste. The purpose is front-loaded, and each sentence adds distinct value: purpose, safety check, and cost estimate. Perfectly concise.

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 simple transfer tool with no output schema, the description covers purpose, safety check, and cost. It lacks detail on error handling (e.g., insufficient balance response) or return value format, but the annotations and schema fill most gaps. Slightly incomplete for a mutation 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?

Schema coverage is 100%, so the baseline is 3. The description does not add additional meaning for parameters beyond the schema's patterns and descriptions. No extra guidance on parameter values or formats.

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 clearly states 'Transfer TRX to another TRON address', specifying the verb (transfer), resource (TRX), and action scope. The sibling tool 'transfer_trc20' handles TRC20 tokens, so this description implicitly distinguishes by focusing on TRX.

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?

The description provides no explicit guidance on when to use this tool versus alternatives. It mentions balance checking and cost but does not state when to use transfer_trc20 or other transfer methods, nor does it describe exclusions or prerequisites.

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

unstake_strxA
Destructive

Unstake sTRX to receive TRX back. Note: unstaked TRX has an unbonding period (typically 14 days) before withdrawal. Pre-checks: sufficient sTRX balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of sTRX to unstake (human-readable decimal string, e.g. '1' or '10.5')
networkNoNetwork. Default: mainnet

TDQS

A4.2/5.0
Behavior4/5

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

The description adds value beyond annotations by disclosing the unbonding period. Annotations already indicate the tool is destructive, and the description provides additional behavioral context about the timing of withdrawal.

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 concise with two sentences, front-loading the primary purpose first. Every sentence provides necessary information without redundancy.

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 simple unstake tool, the description covers the key points: action, output, timing constraint, and prerequisite. It is complete enough for an agent to understand and use the tool correctly, though it could mention effects on staking rewards.

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 provides detailed descriptions for both parameters (amount format, network). The description does not add any new information about parameters beyond what is in 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?

The description clearly states the action: 'Unstake sTRX to receive TRX back.' It uses a specific verb and resource, and distinguishes itself from sibling tools like 'stake_trx_to_strx' which performs the opposite operation.

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 description provides explicit context: it notes the unbonding period and mentions a pre-check for sufficient balance. However, it does not mention alternatives like using 'check_strx_withdrawal_eligibility' to verify eligibility first.

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

unwrap_trxA
Destructive

Unwrap WTRX (Wrapped TRX) back into native TRX at a 1:1 rate via the WTRX contract's withdraw(uint256). No approval is needed — you burn your own WTRX. Reverses wrap_trx (1:1). Pre-checks: sufficient WTRX balance and native TRX for gas.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of WTRX to unwrap into TRX (human-readable decimal string, e.g. '1' or '10.5')
networkNoNetwork. Default: mainnet

TDQS

A4.1/5.0
Behavior4/5

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

Beyond annotations (destructiveHint: true), description adds important details: 'you burn your own WTRX', contract method 'withdraw(uint256)', and 1:1 rate. No contradiction with annotations.

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 sentences, front-loaded with core action (unwrapping, rate). Second sentence covers key details (no approval, pre-checks, reversal). No wasted words.

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

Completeness3/5

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

Adequate for a simple unwrap with clear pre-conditions, but lacks mention of return value (receipt?) or post-unwrap state. Since no output schema, description could be more complete.

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% with clear descriptions for both parameters (amount, network). Description adds no new parameter semantics beyond what schema provides, meeting baseline but not exceeding.

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?

Clearly states it unwraps WTRX to native TRX at a 1:1 rate via the WTRX contract. The verb 'unwrap' is specific to the resource 'WTRX' and contrasts with 'wrap_trx' listed among siblings.

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?

Provides explicit context: no approval needed, pre-checks (sufficient WTRX balance, TRX for gas), and relationship to wrap_trx. It clearly guides when to use this tool, though it could mention when alternatives are preferable.

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

withdraw_votes_from_proposalA
Destructive

Withdraw (reclaim) votes from a completed or canceled proposal. Only works for proposals that are no longer active. After withdrawing, the votes become available again for other proposals or can be converted back to JST.

ParametersJSON Schema
NameRequiredDescriptionDefault
networkNoNetwork. Default: mainnet
proposalIdYesThe proposal ID to withdraw votes from

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description does not need to restate those. It adds behavioral context by specifying the proposal must be completed or canceled, and that votes are reclaimed, which aligns with the destructive nature.

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 only two sentences, with the first sentence stating the action and limitation, and the second describing the effect. Every word is necessary, and it is front-loaded with the core purpose.

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 tool with two parameters, no output schema, and destructive annotations, the description covers the main aspects: what it does, when it works, and the result. It does not mention prerequisites like having votes deposited, but that is implied by the action and the context of voting tools. Overall, it is sufficiently complete.

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 adds value by implying that the proposalId parameter must refer to a completed or canceled proposal, which is not explicitly stated in the schema's parameter description. This extra guidance improves parameter understanding.

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 explicitly states the action 'Withdraw (reclaim) votes from a completed or canceled proposal,' using a specific verb and resource. It distinguishes itself from siblings like 'withdraw_votes_to_jst' by focusing on the proposal rather than conversion to JST.

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 description clearly states the tool only works for proposals that are no longer active, providing a clear when-to-use condition. It also mentions that votes become available for other proposals or conversion to JST, giving context on subsequent actions, though it does not explicitly name alternative sibling tools.

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

withdraw_votes_to_jstA
Destructive

Withdraw WJST back to JST. Can only withdraw votes that are not currently locked in active proposals. Use get_vote_info to check your surplus (available) votes before withdrawing.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of votes/WJST to withdraw back to JST (e.g. '1000')
networkNoNetwork. Default: mainnet

TDQS

A4.4/5.0
Behavior4/5

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

Annotations include destructiveHint: true, consistent with a withdrawal. The description adds important context about the lock constraint on votes. However, it does not mention potential fees or the transaction cost, which would add further value.

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 sentences, front-loaded with the core action. No unnecessary words, every sentence provides value.

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?

The description is complete for a simple mutation tool with no output schema. It explains prerequisites and constraints. However, it could optionally mention the transaction hash return or any side effects like JST balance updates.

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%: both 'amount' and 'network' have descriptions. The tool description does not add new information beyond the schema for the parameters, meeting the baseline expectation.

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 clearly states the tool's action: 'Withdraw WJST back to JST.' It distinguishes from sibling tools like 'deposit_jst_for_votes' (the reverse) and 'withdraw_votes_from_proposal' (different scope).

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

Usage Guidelines5/5

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

Explicit guidance: 'Can only withdraw votes that are not currently locked in active proposals. Use get_vote_info to check your surplus (available) votes before withdrawing.' This provides clear precondition and a prerequisite step.

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

wrap_trxA
Destructive

Wrap native TRX into WTRX (Wrapped TRX) at a 1:1 rate by sending TRX to the WTRX contract's payable deposit(). WTRX is a TRC20 representation of TRX used by DeFi protocols that can't hold native TRX (e.g. JustLend V2 / Moolah markets quoting WTRX). Reversible: unwrap_trx converts WTRX back to TRX 1:1. Pre-checks: sufficient TRX balance for the wrap amount + gas.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount of TRX to wrap into WTRX (human-readable decimal string, e.g. '1' or '10.5')
networkNoNetwork. Default: mainnet

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, and the description confirms it is a write operation. It adds context about the 1:1 rate and reversibility via unwrap_trx, and mentions pre-checks. No contradiction with annotations.

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 three concise sentences, front-loading the core purpose, followed by relevant context and pre-conditions. No unnecessary words.

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

Completeness3/5

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

The description covers purpose, usage, and pre-checks, but does not describe the output/return value (e.g., transaction hash). Given no output schema, this is a gap for an agent needing to confirm execution.

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 description adds value by explaining the amount is a human-readable decimal string and noting the default network. The 1:1 rate and contract interaction context further illuminate the amount parameter.

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 clearly states 'Wrap native TRX into WTRX' at a 1:1 rate via the deposit() function. It specifies the action, resource, and mechanism, and distinguishes from the sibling unwrap_trx tool.

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 description explains that WTRX is needed for DeFi protocols that cannot hold native TRX, giving example use cases. It mentions reversibility and a pre-check for sufficient balance, but does not explicitly list scenarios where this tool should not be used.

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. Dates show when Glama detected each change.

  1. 20 tool updatesv1.1.2
    • Addedapprove_jst_for_voting
    • Addedapprove_underlying
    • Addedcheck_jst_allowance_for_voting
    • Addedclaim_rewards
    • Addedenter_market
    • Addedestimate_lending_energy
    • Addedexit_market
    • Addedget_locked_votes
    • Addedget_market_data
    • Addedget_proposal_list
    • Removedget_strx_dashboard
    • Addedget_token_balance
    • Addedget_user_vote_status
    • Addedget_vote_info
    • Addedget_wallet_address
    • Addedrepay
    • Removedreturn_energy_rental
    • Addedtransfer_trx
    • Addedunwrap_trx
    • Removedwithdraw
  2. 41 tool updatesv1.1.2
    • Removedapprove_jst_for_voting
    • Removedapprove_underlying
    • Removedborrow
    • Removedcheck_allowance
    • Removedcheck_jst_allowance_for_voting
    • Changedclaim_moolah_mining_period4 fields changed
      • changedInput schema / properties / amounts / description
        Previous value: -"Override: token amounts in raw units, slot-aligned with the tree's tokenAddress[]"New value: +"Override: token amounts in raw units (integer strings), slot-aligned with the tree's tokenAddress[]"
      • addedInput schema / properties / amounts / items / description
        Added value: +"Raw-unit token amount"
      • addedInput schema / properties / amounts / items / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / amounts / items / type
        Previous value: -[
        -  "string",
        -  "number"
        -]New value: +"string"
    • Removedclaim_rewards
    • Changedclaim_v1_mining_period2 fields changed
      • changedInput schema / properties / amount / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": [
        -        "string",
        -        "number"
        -      ]
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "description": "Raw-unit amount",
        +    "pattern": "^\\d+$",
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "description": "Raw-unit amount",
        +      "pattern": "^\\d+$",
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / amount / description
        Previous value: -"Override: token amount(s) in raw units; pass an array for multi-token leaves"New value: +"Override: token amount(s) in raw units (integer strings); pass an array for multi-token leaves"
    • Removedconnect_browser_wallet
    • Removedenter_market
    • Removedestimate_lending_energy
    • Removedexit_market
    • Removedget_account_summary
    • Removedget_all_markets
    • Removedget_locked_votes
    • Removedget_market_data
    • Removedget_mining_rewards
    • Removedget_network
    • Removedget_proposal_list
    • Removedget_protocol_summary
    • Removedget_supported_markets
    • Removedget_supported_networks
    • Removedget_token_balance
    • Removedget_trx_balance
    • Removedget_usdd_mining_config
    • Removedget_user_vote_status
    • Removedget_vote_info
    • Removedget_wallet_address
    • Removedget_wallet_balances
    • Removedget_wallet_mode
    • Removedget_wbtc_mining_config
    • Removedlist_wallets
    • Removedrepay
    • Removedset_active_wallet
    • Removedset_network
    • Removedset_wallet_mode
    • Removedsupply
    • Removedtransfer_trc20
    • Removedtransfer_trx
    • Removedwithdraw_all
    • Addedwrap_trx
  3. 96 tool updatesv1.1.1
    • First observedapprove_jst_for_voting
    • First observedapprove_liquidator_token
    • First observedapprove_moolah_proxy
    • First observedapprove_moolah_vault
    • First observedapprove_underlying
    • First observedborrow
    • First observedcalculate_energy_rental_price
    • First observedcast_vote
    • First observedcheck_allowance
    • First observedcheck_jst_allowance_for_voting
    • First observedcheck_strx_withdrawal_eligibility
    • First observedclaim_moolah_mining_period
    • First observedclaim_rewards
    • First observedclaim_strx_rewards
    • First observedclaim_v1_mining_period
    • First observedconnect_browser_wallet
    • First observeddeposit_jst_for_votes
    • First observedenter_market
    • First observedestimate_lending_energy
    • First observedestimate_moolah_energy
    • First observedexit_market
    • First observedget_account_summary
    • First observedget_all_markets
    • First observedget_claimable_rewards
    • First observedget_energy_rent_info
    • First observedget_energy_rental_dashboard
    • First observedget_energy_rental_params
    • First observedget_energy_rental_rate
    • First observedget_energy_rental_records
    • First observedget_lending_records
    • First observedget_liquidation_records
    • First observedget_locked_votes
    • First observedget_market_data
    • First observedget_mining_rewards
    • First observedget_moolah_dashboard
    • First observedget_moolah_history
    • First observedget_moolah_liquidation_quote
    • First observedget_moolah_liquidation_records
    • First observedget_moolah_market
    • First observedget_moolah_market_history
    • First observedget_moolah_markets
    • First observedget_moolah_mining_accruing
    • First observedget_moolah_mining_resolver
    • First observedget_moolah_pending_liquidations
    • First observedget_moolah_pending_mining_periods
    • First observedget_moolah_records
    • First observedget_moolah_user_position
    • First observedget_moolah_vault
    • First observedget_moolah_vault_history
    • First observedget_moolah_vault_mining_apy
    • First observedget_moolah_vaults
    • First observedget_network
    • First observedget_proposal_list
    • First observedget_protocol_summary
    • First observedget_return_rental_info
    • First observedget_strx_account
    • First observedget_strx_balance
    • First observedget_strx_dashboard
    • First observedget_strx_records
    • First observedget_supported_markets
    • First observedget_supported_networks
    • First observedget_token_balance
    • First observedget_trx_balance
    • First observedget_usdd_mining_config
    • First observedget_user_energy_rental_orders
    • First observedget_user_vote_status
    • First observedget_vote_info
    • First observedget_vote_records
    • First observedget_wallet_address
    • First observedget_wallet_balances
    • First observedget_wallet_mode
    • First observedget_wbtc_mining_config
    • First observedlist_wallets
    • First observedmoolah_borrow
    • First observedmoolah_liquidate
    • First observedmoolah_repay
    • First observedmoolah_supply_collateral
    • First observedmoolah_vault_deposit
    • First observedmoolah_vault_redeem
    • First observedmoolah_vault_withdraw
    • First observedmoolah_withdraw_collateral
    • First observedrent_energy
    • First observedrepay
    • First observedreturn_energy_rental
    • First observedset_active_wallet
    • First observedset_network
    • First observedset_wallet_mode
    • First observedstake_trx_to_strx
    • First observedsupply
    • First observedtransfer_trc20
    • First observedtransfer_trx
    • First observedunstake_strx
    • First observedwithdraw
    • First observedwithdraw_all
    • First observedwithdraw_votes_from_proposal
    • First observedwithdraw_votes_to_jst

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap among approve tools (five different approve functions) and get tools (e.g., get_moolah_market vs get_moolah_markets). Descriptions help differentiate, but the large number of tools increases potential confusion.

Naming Consistency5/5

Tool names follow a consistent snake_case pattern with verb_noun structure (e.g., approve_underlying, get_account_summary, supply, borrow). Minor variations like cast_vote and stake_trx_to_strx are still in the same style, making the convention predictable.

Tool Count2/5

With 96 tools, the server is over-scoped. While the domain is broad (lending, staking, governance, energy rental), this many tools make the surface cluttered and harder to navigate. A more focused set (e.g., 20-30) would improve coherence.

Completeness4/5

The tool set covers V1 lending, V2 Moolah, staking, governance, and energy rental comprehensively, with CRUD operations for most features. Minor gaps exist (e.g., no proposal creation tool), but core workflows are supported.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server providing unified access to over 144 tools for lending, trading, and staking across six major DeFi protocols on the Stacks Bitcoin Layer 2. It enables AI agents to perform complex blockchain operations and interact with the DeFi ecosystem using natural language commands.
    3
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    First-party MCP server for Kaskad Protocol — a DeFi lending protocol on Igra L2 (Kaspa). Enables AI agents to autonomously supply, borrow, repay, withdraw, and stake. Includes 16 tools covering live market reads, governance params, health factor monitoring, emission state, and full write access to on-chain lending operations. Compatible with Claude, OpenClaw, and any MCP-compatible client.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/justlend/mcp-server-justlend'

If you have feedback or need assistance with the MCP directory API, please join our Discord server