GDEX Trading
Enables buying and selling tokens on Ethereum via DEX routing through the GDEX managed-custody trading terminal, supporting spot trading and cross-chain portfolio operations.
Enables buying and selling tokens on Solana via DEX routing, as well as managed-custody transfers and copy-trading write operations for Solana assets.
Enables buying and selling tokens on Sui via DEX routing through the GDEX managed-custody trading terminal.
██████╗ ██████╗ ███████╗██╗ ██╗ ██████╗ ██████╗ ██████╗
██╔════╝ ██╔══██╗██╔════╝╚██╗██╔╝ ██╔══██╗██╔══██╗██╔═══██╗
██║ ███╗██║ ██║█████╗ ╚███╔╝ ██████╔╝██████╔╝██║ ██║
██║ ██║██║ ██║██╔══╝ ██╔██╗ ██╔═══╝ ██╔══██╗██║ ██║
╚██████╔╝██████╔╝███████╗██╔╝ ██╗ ██║ ██║ ██║╚██████╔╝
╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝
· p r o · powered by GEMACHAI Agent Skill for GDEX Pro — the self-custody trading terminal by Gemach
Cross-chain spot · HyperLiquid perps · Copy trading · Portfolio · Token discovery · Managed custody
Why agents use GDEX
GDEX is the trading surface. This skill is how AI agents (Claude, Cursor, Codex, and 40+ others) install and trade on it — spot, perps, copy-trade, and bridge — without building their own exchange stack.
Fastest path for an agent:
npx skills add GemachDAO/gdex-skill --all --agent '*' -gThen open gdex.pro for the human terminal, or run the MCP server so the agent can execute trades itself.
Related MCP server: maxia-mcp
Table of Contents
🤖 Install as an Agent Skill
Install directly into Claude Code, Cursor, Codex, Windsurf, and 40+ other agents using the skills CLI:
# Install all skills (recommended)
npx skills add GemachDAO/gdex-skill --all --agent '*' -g
# Pick skills interactively
npx skills add GemachDAO/gdex-skill
# Install a specific skill
npx skills add GemachDAO/gdex-skill --skill gdex-spot-tradingGDEX uses a multi-skill architecture — agents load only the skills they need, keeping context lean and focused.
Available Skills
Skill | Description |
| Start here for agents: status → connect → preview → execute within your authority → follow → exit |
| Platform overview, architecture, supported chains, quickstart |
| Retailer partner integrations — branded onboarding partners on the GDEX stack |
| Managed-custody auth, encryption, session keys, API key login |
| Buy/sell tokens on any chain with DEX routing |
| HyperLiquid perpetual futures — positions, orders, leverage |
| Deposit/withdraw USDC to/from HyperLiquid |
| Create, cancel, and list limit orders |
| Cross-chain portfolio, balances, trade history |
| Token details, trending tokens, OHLCV charts (no auth) |
| Import custom tokens into details, balances and portfolio |
| Solana livestream tokens, live status, big-buy alerts |
| Watchlists, token comments, sentiment voting |
| Book paid trending slots and check booking status |
| Tokenised equities (xStocks) listing |
| Zora content coins and creator coins on Base |
| Copy trade create/delete, leaderboards, tx history, DEX list (Solana only for writes) |
| HL perp copy trading — top traders, create/manage configs, market data |
| Hyperliquid HIP-4 outcome markets — discover, pick a side, limit order, cancel/exit, reconcile (no Polymarket/Kalshi) |
| HyperLiquid referral info and reward claims |
| Cross-chain bridging with quotes |
| Unified USDC wallet — one USDC balance across chains, buy/sell in USDC, auto-bridge funding |
| Native and ERC20/SPL transfers via managed custody |
| Generate EVM wallets, session keys, wallet info (no auth) |
| React/Next.js project setup, SDK context providers, environment variables |
| React component patterns for order forms, position tables, copy trade panels |
| Portfolio dashboard components — balances, trade history, chain selectors |
| Wallet connection UI — connect buttons, auth state, chain switching |
| CSS theming — dark/light mode, trading colors, responsive breakpoints, Tailwind |
| Full page compositions — trading, portfolio, copy trading, bridge pages |
| Troubleshoot errors — error codes, encryption debugging, chain quirks, HL gotchas |
Each skill's description tells the agent when to load it. No API key setup required for trading skills (shared keys are built in).
Risk & Market Data Skills
Deterministic data feeds and events for risk and research. Each ships a standard-library Python script that prints NDJSON: no API key, no install, and every number comes from the script, not a model.
Skill | Output |
| ~234 HyperLiquid core perps: funding, open interest, oracle premium, leverage caps, delisting |
| Scored, time-stamped HyperLiquid anomaly events (oracle divergence, funding extremity, liquidity shock) against per-market learned baselines, plus a coverage record per run. Backtest |
| GDEX token screen on 12 chains: price, liquidity, volume, honeypot, taxes, LP lock, holder concentration (missing security data is never "safe") |
| GVault (GMACL, Enzyme on Ethereum): NAV, share price, holdings, cumulative and annualised return |
python3 skills/gdex-hl-market-risk/scripts/hl_market_risk.py > hl.ndjsonSkills Harness (bring your own key)
harness/ runs these skills with Claude on your own Anthropic API key.
export produces every feed with no model; ask answers questions with an agent that can only
cite figures that skill scripts printed. Every script run is logged with a sha256 of its output.
🔌 MCP Server
The GDEX MCP server exposes 154 tools — full trading execution + SDK documentation — as Model Context Protocol tools. Any MCP-compatible AI agent can trade autonomously.
Source code: the server is implemented in this repository, in mcp-server/. The entry point is mcp-server/src/index.ts and the tool handlers are in mcp-server/src/tools/. The npm package @gemachdao/gdex-mcp-server is built from that directory by the release workflow. See mcp-server/README.md to run it from source or with the repo's Dockerfile.
Quick Setup
# Auto-generate config for your AI client
npx @gemachdao/gdex-mcp-server init --client claude # → .mcp.json
npx @gemachdao/gdex-mcp-server init --client cursor # → .cursor/mcp.json
npx @gemachdao/gdex-mcp-server init --client vscode # → .vscode/mcp.json
npx @gemachdao/gdex-mcp-server init --client codex # → .codex/config.toml
npx @gemachdao/gdex-mcp-server init --client opencode # → opencode.json ("mcp" section)init merges into an existing config: other MCP servers and settings are kept, the previous file is saved as <file>.bak, and rerunning is a no-op. If a different gdex-mcp-server entry is already there it is shown and left alone unless you pass --force; a config it can't parse is never modified.
Claude Code plugin
/plugin marketplace add GemachDAO/gdex-skill
/plugin install gdex@gemachdaoInstalls every GDEX skill plus the MCP server (npx -y @gemachdao/gdex-mcp-server). The optional GDEX API key is kept in your system credential store.
Requirements
Node.js 22 or newer. The Hyperliquid client libraries need Node 22's built-in WebSocket; on Node 20 the perp tools fail.
Agent trading flow
What is verified live versus offline, per chain and venue, is in docs/AGENT-READINESS.md.
Agents should start with gdex_status, connect once with gdex_connect, then gdex_preview_trade → gdex_execute_trade (user-approved, or within the delegated policy in ~/.gdex/policies/<accountRef>.json) → gdex_operation, and manage exits with gdex_positions / gdex_manage_position. Every tool carries read/write annotations. See the gdex-agent-trading skill.
Connect an account (no secrets in chat)
Ask your agent to run gdex_connect with a key file on your machine, e.g. gdex_connect { keyFile: "~/my-gdex-wallet.json" } (JSON with privateKey), or gdex_connect { create: true } for a new wallet. The server signs in, stores the keys under ~/.gdex/accounts (mode 0600) and returns an accountRef. Pass accountRef to any trading tool instead of sessionPrivateKey/privateKey. Never paste a private key or seed phrase into the chat. gdex_accounts lists connected accounts; gdex_disconnect forgets one.
Codex (OpenAI)
codex plugin marketplace add GemachDAO/gdex-skill
codex plugin add gdex@gemachdaoInstalls every GDEX skill plus the MCP server. For the MCP server only: codex mcp add gdex -- npx -y @gemachdao/gdex-mcp-server.
Gemini CLI extension
gemini extensions install https://github.com/GemachDAO/gdex-skillManual Config
Add to your client's MCP config:
{
"mcpServers": {
"gdex-mcp-server": {
"command": "npx",
"args": ["@gemachdao/gdex-mcp-server"],
"env": {
"GDEX_API_KEY": "your-api-key"
}
}
}
}Environment Variables
Variable | Description | Required |
| GDEX API key — auto-authenticates on startup | Optional |
| Override API base URL (default: | Optional |
MCP Execution Tools (145 tools)
Category | Tools | Description |
Agent flow |
| Readiness, exact previews, execution within user approval or a delegated policy, operation tracking and recovery, positions and exits |
Auth |
| API key login, session keys, managed custody sign-in |
Spot Trading |
| Buy/sell on Solana, Sui and 10 EVM chains (Ethereum, Base, Arbitrum, BSC and more) |
Perp Trading |
| Full HyperLiquid perpetual futures — long/short, TP/SL; leverage up to each market's cap (40x on core BTC) |
Perp Data |
| Real-time HyperLiquid account, positions, prices |
Direct Execution |
| Private-key execution — cross/isolated margin, spot, cancel |
Limit Orders |
| Limit buy/sell with TP/SL, order management |
Copy Trading (Solana) |
| Auto-mirror top Solana traders |
Copy Trading (HL Perp) |
| Copy HyperLiquid perp traders |
Portfolio & Data |
| Cross-chain portfolio, market data, OHLCV candles |
Bridge |
| Cross-chain native token bridging |
Unified USDC Wallet |
| One USDC balance across 7 chains; buy with USDC or native with automatic cross-chain funding and gas, live funding progress, sell to USDC, convert gas to USDC, bridge USDC |
Managed Custody |
| Low-level encrypted trade submission |
Transfers |
| Send native and ERC20/SPL tokens via managed custody |
Social & Watchlist |
| Token comments, sentiment votes, watchlists |
Token Import |
| Add a custom token so it appears in details, balances and portfolio |
Market Discovery & Analytics |
| New and top tokens, trades, prices, xStocks, Zora coins, wallet performance, NoF1 analytics, PnL generation |
Livestream |
| Solana livestream tokens and big-buy alerts |
HL Outcome Markets |
| Hyperliquid HIP-4 outcome markets |
HL Account & Referral |
| One-time HL enablement, HIP-3 collateral swaps, fills/orders, copy-trade PnL, referral rewards |
Promotion & Partners |
| Paid trending slots and retailer partners |
Account |
| Google sign-in and linking an email to a wallet |
MCP Documentation Tools (9 tools)
Tool | Description |
| Search documentation by keyword |
| TypeScript code patterns by operation |
| API endpoint details (URL, method, params) |
| Step-by-step trading workflows |
| Supported chains and capabilities |
| Spot, perp, or limit trading guides |
| Copy trading guides (Solana / HL) |
| React UI component patterns |
| Read a file a skill ships with (e.g. |
📦 SDK Installation
npm install github:GemachDAO/gdex-skillInstalls the SDK straight from GitHub (it builds on install). Imports stay
from '@gemachdao/gdex-skill'. Pin a release withnpm install github:GemachDAO/gdex-skill#v4.1.1.
The install script displays a quick-start banner in your terminal. Optional peer dependencies for wallet signing (only needed for user-specific wallet auth):
npm install ethers # EVM wallet auth npm install bs58 tweetnacl # Solana wallet auth
🚀 Quick Start
import { GdexSkill, GDEX_API_KEY_PRIMARY } from '@gemachdao/gdex-skill';
// 1. Create skill instance
const skill = new GdexSkill();
// 2. Authenticate with the pre-configured shared key (enough for read-only calls)
skill.loginWithApiKey(GDEX_API_KEY_PRIMARY);
// 3. Trades need the managed-custody session from sign-in (see Managed-Custody Flow below):
// the control wallet signs once, the session key signs each trade.
const creds = { apiKey: GDEX_API_KEY_PRIMARY, walletAddress: controlAddress, sessionPrivateKey };
// 4. Spot buy on Base (0.01 ETH)
const trade = await skill.buyToken({
chain: 8453,
tokenAddress: '0xTokenAddress',
amount: '0.01',
slippage: 1, // 1% max slippage
...creds,
});
console.log('Trade submitted:', trade.jobId, '— status:', trade.status);
// 5. Open a BTC 10× long on HyperLiquid (size is in BTC, not USD)
const mark = await skill.getHlMarkPrice('BTC');
const pos = await skill.hlCreateOrder({
coin: 'BTC',
isLong: true,
price: String(mark),
size: '0.001',
isMarket: true,
leverage: 10,
tpPrice: '110000',
slPrice: '95000',
...creds,
});
// 6. Read-only endpoints need no auth
const trending = await skill.getTrendingTokens({ chain: 'solana', period: '24h', limit: 5 });
console.log('Trending:', trending.map(t => t.symbol).join(', '));✅ Verify (offline)
Confirm the SDK is installed and configured correctly — no network connection or API key required:
npm run verifySample output:
1. SDK import
✓ SDK imported from ../dist/index.js
2. API keys
✓ GDEX_API_KEY_PRIMARY = 9b4e1c73...
✓ GDEX_API_KEY_SECONDARY = 2c8f0a91...
✓ GDEX_API_KEYS array = 2 keys
3. GdexSkill instantiation
✓ new GdexSkill() — default config
✓ new GdexSkill({ apiUrl, timeout, maxRetries }) — custom config
4. Authentication state (offline)
✓ isAuthenticated() = false before login
✓ loginWithApiKey(GDEX_API_KEY_PRIMARY) → isAuthenticated() = true
✓ logout() → isAuthenticated() = false
...
All 20 checks passed ✓
SDK is ready — no network token required.🔑 Authentication
Shared API Keys (recommended for agents)
Two shared keys are pre-configured in the package — agents do not need to sign wallet transactions:
import {
GdexSkill,
GDEX_API_KEY_PRIMARY,
GDEX_API_KEY_SECONDARY,
GDEX_API_KEYS,
} from '@gemachdao/gdex-skill';
const skill = new GdexSkill();
skill.loginWithApiKey(GDEX_API_KEY_PRIMARY); // use primary
// or:
skill.loginWithApiKey(GDEX_API_KEY_SECONDARY); // use secondary
// or cycle through them:
skill.loginWithApiKey(GDEX_API_KEYS[0]);
skill.isAuthenticated(); // → true
skill.logout(); // clear sessionNote: Read-only endpoints (
getTrendingTokens,getTokenDetails,getOHLCV,getTopTraders) do not require authentication.
Wallet-based Auth (advanced)
For user-owned wallets or custom signers (hardware wallets, browser extensions):
// EVM wallet (secp256k1)
await skill.authenticate({
type: 'evm',
address: '0xYourAddress',
privateKey: '0xPrivateKey',
});
// Solana wallet (ed25519)
await skill.authenticate({
type: 'solana',
address: 'YourSolanaAddress',
privateKey: 'base58EncodedPrivateKey',
});
// Custom signer (MetaMask / Phantom)
await skill.authenticate({
type: 'evm',
address: accounts[0],
signer: async (message) =>
window.ethereum.request({ method: 'personal_sign', params: [message, accounts[0]] }),
});Configuration
const skill = new GdexSkill({
apiUrl: 'https://trade-api.gemach.io/v1', // Backend (default)
timeout: 30000, // Request timeout ms
maxRetries: 3, // Retry attempts on 429/503
debug: false, // Log every request
});The SDK does not read environment variables directly. If you choose to use env vars,
read them in your application (for example via process.env) and pass their values into
the GdexSkill constructor as shown above.
Recommended environment variables for your own app:
Env Variable | Description | Default |
| Backend base URL to pass as |
|
| API key for AES encryption in managed-custody flow | — |
| Request timeout (ms) to pass as |
|
| Retry attempts to pass as |
|
| Enable debug logging to pass as |
|
| Control wallet address (userId) for managed custody | — |
| Session private key (hex, 0x-prefixed) for managed custody | — |
| Chain ID for managed trades (622112261=Solana, 42161=Arbitrum for perps) |
|
| Set to | — |
🔒 Managed-Custody Trading
All trading on GDEX goes through server-side managed wallets. Your control wallet (EVM or Solana) is only used to authenticate (sign-in) — actual on-chain execution is handled by GDEX backend trade workers.
How It Works
Generate a session keypair — secp256k1 key used to sign trades after auth
Sign-in — control wallet signs a message, encrypted as
computedData→ POST/v1/sign_inResolve user — GET
/v1/userwith encrypted session key to see managed walletsTrade — ABI-encode trade data, sign with session key, encrypt as
computedData→ POST/v1/purchase_v2or/v1/sell_v2Poll status — GET
/v1/trade-status/:requestIduntil completed/failed
Encryption
All authenticated payloads use AES-256-CBC with a deterministic key/IV derived from the API key (no random IV):
Key = first 32 bytes of
SHA256(apiKey)hexIV = first 16 bytes of
SHA256(SHA256(apiKey))hexTrade/sign-in payloads:
JSON.stringify({ userId, data, signature, apiKey })→ UTF-8 → encrypt → hexSession key (
/v1/user): hex-decoded raw bytes → encrypt (not UTF-8 string)The API key is included inside the encrypted JSON payload (not just used for encryption)
WARNING: Do NOT use random IVs or the
iv:ciphertextformat. The backend uses deterministic AES derived from the API key hash chain.
Signatures
Spot trade signatures (purchase/sell) use raw keccak256 + secp256k1 (no EIP-191 prefix):
Message:
"<action>-<lowercaseUserId>-<dataHexWithout0x>"Digest:
keccak256(utf8Bytes(message))Output:
r(64 hex) + s(64 hex) + v(2 hex)= 130 chars, no0xprefixv = raw recovery parameter (
00or01), NOT EIP-155 (1b/1c)
HL perp signatures use the same algorithm but with HL-specific action prefixes (hl_deposit, hl_withdraw, hl_create_order, etc.) and different ABI schemas. See the HL Managed-Custody Reference section.
Sign-in signatures use EIP-191 personal_sign with the control wallet — this is the ONLY operation that uses EIP-191. All post-sign-in operations use raw keccak256.
Nonce Generation
Nonces are client-generated (not fetched from the server):
const nonce = String(Math.floor(Date.now() / 1000) + Math.floor(Math.random() * 1000));Quick Example
import {
GdexSkill,
GDEX_API_KEY_PRIMARY,
generateGdexSessionKeyPair,
buildGdexSignInMessage,
buildGdexSignInComputedData,
buildGdexManagedTradeComputedData,
buildGdexUserSessionData,
} from '@gemachdao/gdex-skill';
const skill = new GdexSkill();
skill.loginWithApiKey(GDEX_API_KEY_PRIMARY);
const apiKey = GDEX_API_KEY_PRIMARY;
// 1. Session keypair
const { sessionPrivateKey, sessionKey } = generateGdexSessionKeyPair();
// 2. Sign-in (control wallet signs this message)
const userId = '0xYourControlWallet';
const nonce = String(Math.floor(Date.now() / 1000) + Math.floor(Math.random() * 1000));
const message = buildGdexSignInMessage(userId, nonce, sessionKey);
const signature = /* wallet.signMessage(message) */;
const signInPayload = buildGdexSignInComputedData({ apiKey, userId, sessionKey, nonce, signature });
await skill.signInWithComputedData({ computedData: signInPayload.computedData, chainId: 622112261 }); // Solana; 1 for EVM/HL
// 3. Trade
const trade = buildGdexManagedTradeComputedData({
apiKey, action: 'purchase', userId,
tokenAddress: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263',
amount: '100000',
nonce: String(Math.floor(Date.now() / 1000) + Math.floor(Math.random() * 1000)),
sessionPrivateKey,
});
const result = await skill.submitManagedPurchase({
computedData: trade.computedData, chainId: 622112261, slippage: 1, // Solana (NOT 900)
});
// 4. Poll
if (result.requestId) {
const status = await skill.getManagedTradeStatus(result.requestId);
console.log(status.status, status.hash);
}Managed-Custody Helpers
Function | Purpose |
| Generate secp256k1 session keypair |
| Build the sign-in message for wallet signing |
| ABI-encode sign-in data ( |
| Build encrypted sign-in payload |
| Encrypt session key (raw hex bytes) for |
| ABI-encode trade data ( |
| Sign trade with session key (v = raw recoveryParam |
| Build encrypted trade payload |
| ABI-encode limit order data (buy/sell/update schemas) |
| Sign limit order with session key |
| Build encrypted limit order payload |
| Copy trade payloads are ABI-encoded (create: 12 fields, update: 16 fields, chainId is |
| Encrypt JSON |
| AES-256-CBC encrypt UTF-8 plaintext |
| AES-256-CBC encrypt raw hex-decoded bytes |
| AES-256-CBC decrypt to UTF-8 plaintext |
| Get raw AES key/IV from API key |
Verify Managed Flow (offline)
npm run verify:managedThis generates all payloads (session keypair, sign-in, user lookup, trade), validates encrypt/decrypt roundtrips, and prints the full execution plan — without making any live API calls.
📚 API Reference
Spot Trading
buyToken(params)
Buy a token on any supported chain.
Parameter | Type | Required | Description |
|
| ✅ | Chain name or numeric ID |
|
| ✅ | Token contract address |
|
| ✅ | Native token input amount |
|
| Max slippage % (default: 1) | |
|
| Force specific DEX | |
|
| Override wallet address | |
|
| Solana priority fee (lamports) |
const result = await skill.buyToken({
chain: 'solana',
tokenAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
amount: '0.1',
slippage: 1,
});
// result.jobId, result.status, result.txHash, result.outputAmountsellToken(params)
// Sell absolute amount
await skill.sellToken({ chain: 8453, tokenAddress: '0x...', amount: '100', slippage: 0.5 });
// Sell 50% of holdings
await skill.sellToken({ chain: 'solana', tokenAddress: '...', amount: '50%' });Perpetual Futures (HyperLiquid)
Critical: HyperLiquid deposits/withdrawals/orders use a different crypto flow than spot trades. See the HL Managed-Custody Reference section below for exact specifications.
Every perp write takes the managed-custody credentials { apiKey, walletAddress, sessionPrivateKey },
where walletAddress is the control wallet that signed in (MCP: pass accountRef from gdex_connect).
hlCreateOrder(params) — open (or add to) a position
Parameter | Type | Default | Description |
|
| Asset symbol (e.g., | |
|
|
| |
|
| Limit price; for market orders the mark price ( | |
|
| Size in contracts (coin units), not USD. Min order value $11 | |
|
|
| Market or limit |
|
| HL default (20×) | 1–50×, sent as a top-level field with the order |
|
|
| Optional TP / SL price ( |
|
|
| Only reduce an existing position |
const pos = await skill.hlCreateOrder({
coin: 'BTC', isLong: true, price: String(await skill.getHlMarkPrice('BTC')), size: '0.001',
isMarket: true, leverage: 10, tpPrice: '110000', slPrice: '95000',
apiKey, walletAddress, sessionPrivateKey,
});closePerpPosition(params)
Reads the live position and closes it with a reduce-only market order on the opposite side.
const creds = { apiKey, walletAddress, sessionPrivateKey };
await skill.closePerpPosition({ coin: 'BTC', positionAddress: managedEvmAddress, ...creds }); // close 100%
await skill.closePerpPosition({ coin: 'ETH', size: '0.05', positionAddress: managedEvmAddress, ...creds }); // partial closeOther perp methods
// Deposit USDC to HyperLiquid from Arbitrum (human-readable amount, converted internally; min 10 USDC)
await skill.perpDeposit({
tokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // USDC on Arbitrum
amount: '10',
chainId: 42161,
apiKey, walletAddress, sessionPrivateKey,
});
await skill.perpWithdraw({ amount: '5', apiKey, walletAddress, sessionPrivateKey });
// Positions live on the managed EVM wallet
const positions = await skill.getPerpPositions({ walletAddress: managedEvmAddress });
// Each: { coin, side, size, entryPrice, markPrice, leverage, unrealizedPnl, liquidationPrice }HL Deposit notes: Amount is in human-readable USDC (e.g.,
'10'for 10 USDC). The SDK automatically converts to smallest unit (6 decimals). Minimum deposit is 10 USDC. Your managed wallet must have the deposit amount + 1% fee buffer in USDC on Arbitrum. After the on-chain tx confirms, HyperLiquid takes ~10 minutes to credit the deposit.
Direct HyperLiquid Execution (via @gdexsdk/hyper-liquid-trader)
For direct trading on HyperLiquid L1 without managed custody — use your own private key:
// Cross-margin perpetual trade
const result = await skill.hlExecuteCrossPerp(
process.env.PRIVATE_KEY!,
{ coin: 'BTC', isLong: true, price: '100000', positionSize: '0.001', leverage: 10 },
);
// Isolated-margin perpetual trade
const result2 = await skill.hlExecuteIsolatedPerp(
process.env.PRIVATE_KEY!,
{ coin: 'ETH', isLong: false, price: '3000', positionSize: '1', leverage: 5 },
);
// Spot trade on HyperLiquid
const result3 = await skill.hlExecuteSpot(
process.env.PRIVATE_KEY!,
{ coin: 'PURR', isBuy: true, price: '0.50', size: '100' },
);
// Cancel an order directly
await skill.hlDirectCancelOrder(process.env.PRIVATE_KEY!, 'BTC', orderId);
// Get all mid prices
const mids = await skill.getHlAllMids();
// Get trade history
const trades = await skill.getHlTradeHistory('0xYourWallet');
// Get a trader's leverage context (for copy trading)
const leverage = await skill.getHlTraderLeverageContext('0xTraderWallet', 'BTC');
// Create a standalone HyperLiquidTrading instance with custom WS URLs
const trader = await skill.createHlTrader(['wss://custom-ws.example.com']);Limit Orders
Endpoints:
limit_buy/limit_sell/update_order/orders— NOTorders/createororders/cancel.
// Limit buy — buy WIF when price drops to $0.50 on Solana
const buyResult = await skill.limitBuy({
apiKey: GDEX_API_KEY_PRIMARY,
userId: '0x53D029a671bd1CF61a2fB1F4F6e4bD830BFBb2eD', // control wallet
sessionPrivateKey: '<session-key-hex>',
chainId: 622112261, // Solana
tokenAddress: 'EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm',
amount: '10000000', // lamports
triggerPrice: '0.50',
profitPercent: '50', // optional: TP at 50% gain
lossPercent: '25', // optional: SL at 25% loss
});
// Limit sell — sell WIF when price reaches $999.99 (take-profit)
const sellResult = await skill.limitSell({
apiKey: GDEX_API_KEY_PRIMARY,
userId: '0x53D029a671bd1CF61a2fB1F4F6e4bD830BFBb2eD',
sessionPrivateKey: '<session-key-hex>',
chainId: 622112261,
tokenAddress: 'EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm',
amount: '100000',
triggerPrice: '999.99',
});
// Delete/cancel an order
await skill.updateOrder({
apiKey: GDEX_API_KEY_PRIMARY,
userId: '0x53D029a671bd1CF61a2fB1F4F6e4bD830BFBb2eD',
sessionPrivateKey: '<session-key-hex>',
chainId: 622112261,
orderId: '<64-char-hex-order-id>',
isDelete: true,
});
// List active orders (uses session-key auth, not full computedData)
const { count, orders } = await skill.getLimitOrders({
userId: '0x53D029a671bd1CF61a2fB1F4F6e4bD830BFBb2eD',
data: encryptedSessionKey, // from buildGdexUserSessionData()
chainId: 622112261,
});Copy Trading
Solana-only for write operations. Sign-in must use
chainId: 622112261. The ABI encodeschainIdasuint256.
Discovery (no auth)
// Top 300 wallets by total PnL (cached 2 min)
const topWallets = await skill.getCopyTradeWallets();
// [{ address, totalPnl, receivedMinusSpent, spent, unrealizedValue, chainId }]
// Top 300 by net received
const customWallets = await skill.getCopyTradeCustomWallets();
// Hot new tokens from top wallets (cached 20s)
const gems = await skill.getCopyTradeGems();
// Supported DEXes for Solana
const dexes = await skill.getCopyTradeDexes(622112261);
// [{ dexName: 'pumpfun', dexNumber: 0, programId: '...' }, ...]Read (session-key auth)
import { buildGdexUserSessionData } from '@gemachdao/gdex-skill';
const data = buildGdexUserSessionData(sessionKey, apiKey);
// List copy trade configs (cached 20s per user)
const { allCopyTrades, dexes } = await skill.getCopyTradeList({ userId, data });
// allCopyTrades: [{ copyTradeId, copyTradeName, traderWallet, isActive, lossPercent, profitPercent, ... }]
// Transaction history with PnL
const { txes } = await skill.getCopyTradeTxList({ userId, data });Create (computedData auth)
import {
GDEX_API_KEY_PRIMARY,
buildCopyTradeComputedData,
generateGdexSessionKeyPair,
buildGdexSignInMessage,
buildGdexSignInComputedData,
} from '@gemachdao/gdex-skill';
// Sign-in MUST use chainId: 622112261 for copy trade operations
const result = await skill.createCopyTrade({
apiKey: GDEX_API_KEY_PRIMARY,
userId: controlWalletAddress,
sessionPrivateKey,
chainId: 622112261, // Solana only
traderWallet: 'SolanaTraderAddress',
copyTradeName: 'Alpha Trader',
buyMode: 1, // 1 = fixed SOL, 2 = percentage
copyBuyAmount: '0.001', // SOL amount (mode 1) or percentage (mode 2)
lossPercent: '50', // stop-loss at 50%
profitPercent: '100', // take-profit at 100%
copySell: true, // also copy sell trades
isBuyExistingToken: false, // skip tokens already held
excludedDexNumbers: [], // no DEX exclusions
});
// { isSuccess: true, message: 'created new copy trade successfully', allCopyTrades: [...] }Update / Pause / Resume / Delete (computedData auth)
const ids = { apiKey: GDEX_API_KEY_PRIMARY, userId: controlWalletAddress, sessionPrivateKey, copyTradeId: '<64-char-hex-id>' };
await skill.updateCopyTradeSettings({ ...ids, lossPercent: '40' }); // never deletes or pauses
await skill.pauseCopyTrade(ids); // isActive=false; no-op if already paused
await skill.resumeCopyTrade(ids); // isActive=true; no-op if already active
await skill.deleteCopyTrade(ids); // permanentEach reads the current config from /copy_trade/list first, because the backend
rewrites every field on update and isChangeStatus is a relative toggle
(isActive = !existing.isActive). Deleting removes the configuration only:
positions it opened are not sold and their TP/SL limit orders are not
cancelled. While paused the copier mirrors neither buys nor sells.
Copy Trade ABI Reference
Typed exactly as the backend decodes them (src/shared/parser/evm/decoder.ts):
Action | Fields | ABI Types |
| 12 |
|
| 15 |
|
Create field order: [traderWallet, copyTradeName, chainId, gasPrice, buyMode, copyBuyAmount, isBuyExistingToken, lossPercent, profitPercent, nonce, copySell, excludedDexNumbers]
Update field order: [traderWallet, copyTradeName, chainId, gasPrice, buyMode, copyBuyAmount, isBuyExistingToken, lossPercent, profitPercent, nonce, isDelete, isChangeStatus, copyTradeId, copySell, excludedDexNumbers]
SDK versions up to 4.12 encoded every field as a string; the backend then decoded
isDelete=true, so every update deleted. Nonce is auto-generated by the SDK.
HL Perp Copy Trading
Completely separate from Solana copy trading above. This copies perpetual futures positions (long/short) on HyperLiquid. Sign-in uses
chainId: 1. All ABI fields are strings.
Discovery (no auth)
// Top traders by volume/tradeCount/deposit (cached 15 min)
const topByVolume = await skill.getHlTopTraders('volume');
const topByPnl = await skill.getHlTopTradersByPnl();
// Detailed trader stats (cached 1 hr)
// NOTE: Requires MANAGED wallet address, not control wallet
const stats = await skill.getHlUserStats('0xManagedWalletAddress');
// { userStats: { '24h', '7d', '30d', dailyPnls, volumes, tradesCount, allTime } }
// Market data
const dexes = await skill.getHlPerpDexes();
const assets = await skill.getHlAllAssets();
const tokens = await skill.getHlDepositTokens();
// Account state
const state = await skill.getHlClearinghouseState('0xAddress');
const orders = await skill.getHlOpenOrdersForCopy('0xAddress');
const balance = await skill.getHlUsdcBalanceForCopy('0xAddress');Read (session-key auth)
import { buildGdexUserSessionData } from '@gemachdao/gdex-skill';
const data = buildGdexUserSessionData(sessionKey, apiKey);
// List HL copy trade configs
const { allCopyTrades } = await skill.getHlCopyTradeList({ userId, data });
// [{ copyTradeId, copyTradeName, copyMode, traderWallet, isActive, oppositeCopy, totalPnl, ... }]
// Fill history (cached 15s, max 100 per page)
const { txes, totalCount } = await skill.getHlCopyTradeTxList({ userId, data, page: '1', limit: '20' });
// [{ coin, px, sz, side, dir, closedPnl, copyTradeName, traderWallet, ... }]Create (computedData auth)
await skill.createHlCopyTrade({
apiKey,
userId: controlWalletAddress,
sessionPrivateKey,
traderWallet: '0xTraderEvmAddress',
copyTradeName: 'BTC Whale',
copyMode: 1, // 1 = fixed USD, 2 = proportion
fixedAmountCostPerOrder: '50000000', // copyMode 1: raw USDC, 6 decimals ($50 per copied trade)
lossPercent: '25', // mandatory, > 0 and < 100
profitPercent: '100', // mandatory, > 0
oppositeCopy: false, // true = copy opposite direction
});Update / Pause / Resume / Delete (computedData auth)
const ids = { apiKey, userId: controlWalletAddress, sessionPrivateKey, copyTradeId: 'abc123...' };
await skill.updateHlCopyTradeSettings({ ...ids, copyMode: 2, fixedAmountCostPerOrder: '0.5', oppositeCopy: false });
await skill.pauseHlCopyTrade(ids); // isActive=false; copied positions stay open and stop following the trader's exits
await skill.resumeHlCopyTrade(ids);
await skill.deleteHlCopyTrade(ids); // permanent; does NOT close positions or cancel their TP/SLHL Perp Copy Trade ABI Reference
Action | Fields | ABI Types |
| 8 |
|
| 11 |
|
Create field order: [traderWallet, copyTradeName, copyMode, fixedAmountCostPerOrder, lossPercent, profitPercent, nonce, oppositeCopy]
Update field order: [traderWallet, copyTradeName, copyMode, fixedAmountCostPerOrder, lossPercent, profitPercent, nonce, isDelete, isChangeStatus, copyTradeId, oppositeCopy]
Configs written by SDK <= 4.12 (string-encoded ABI) hold
copyMode416/480 andoppositeCopy: true; repair them withupdateHlCopyTradeSettingsand explicit values.isChangeStatustogglesisActive; onlyisDeletedeletes.
Portfolio
// Portfolio on one chain (managed-account read: also pass the session, see gdex-portfolio)
const portfolio = await skill.getPortfolio({ walletAddress: '0x...', chain: ChainId.BASE });
// { totalValueUsd, balances, perpPositions?, realizedPnl, unrealizedPnl }
// Chain-specific balances
const balances = await skill.getBalances({ walletAddress: '0x...', chain: ChainId.ETHEREUM });
// Paginated trade history
const history = await skill.getTradeHistory({
walletAddress: '0x...', chain: ChainId.BASE, page: 1, limit: 20,
startTime: 1700000000, endTime: 1700086400,
});Token Information
🔓 No authentication required for these endpoints.
// Token details
const token = await skill.getTokenDetails({
tokenAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
chain: 'solana',
});
// { symbol, name, priceUsd, priceChange24h, marketCap, fdv, volume24h, liquidity }
// Trending tokens
const trending = await skill.getTrendingTokens({
chain: 'solana',
period: '24h', // '1h' | '6h' | '24h' | '7d'
limit: 20,
minLiquidity: 50000,
});
// OHLCV candles
const ohlcv = await skill.getOHLCV({
tokenAddress: 'So11111111111111111111111111111111111111112',
chain: 'solana',
resolution: '60', // '1'|'5'|'15'|'30'|'60'|'240'|'D'|'W'
from: Math.floor(Date.now() / 1000) - 86400,
to: Math.floor(Date.now() / 1000),
});Top Traders
🔓 No authentication required.
const traders = await skill.getTopTraders({
chain: 'solana',
period: '7d', // '1d' | '7d' | '30d' | 'all'
limit: 10,
sortBy: 'pnl', // 'pnl' | 'winRate' | 'volume' | 'tradeCount'
});
// [{ address, totalPnlUsd, winRate, tradeCount, totalVolumeUsd }]Bridge
Native-token bridging (amounts in raw units: wei / lamports). For USDC see the Unified USDC Wallet.
// Get quote first (no auth)
const quote = await skill.estimateBridge({
fromChainId: ChainId.ETHEREUM,
toChainId: ChainId.BASE,
amount: '100000000000000000', // 0.1 ETH in wei
});
console.log('Output:', quote.estimateAmount, '— ETA (s):', quote.minEstimateTime, '-', quote.maxEstimateTime);
// Execute bridge (managed custody; sign in with chainId 1)
const result = await skill.requestBridge({
fromChainId: ChainId.ETHEREUM,
toChainId: ChainId.BASE,
amount: '100000000000000000',
userId: controlAddress,
sessionPrivateKey,
apiKey,
});
console.log(result.isSuccess, result.hash);Wallet Info
// Managed-account read: control walletAddress plus the session (sessionPrivateKey + apiKey, or data)
const info = await skill.getWalletInfo({ walletAddress: controlWalletAddress, sessionPrivateKey, apiKey, chain: 'solana' });
// { address, nativeBalance, nativeSymbol, totalValueUsd, tokenCount }Wallet Generation
🔓 No authentication required. Keys are generated locally and never transmitted.
When a user doesn't have a wallet yet, generate an EVM control wallet for them. Then use the managed-custody sign-in flow to authenticate, and the Gbot backend automatically provisions a full trading wallet — including a Solana address and other chain-specific keys — server-side. No separate Solana wallet generation is needed.
generateEvmWallet() — your control wallet
Generates a new EVM-compatible wallet (Ethereum, Base, Arbitrum, BSC, etc.) using ethers.Wallet.createRandom().
import {
GdexSkill,
generateEvmWallet,
generateGdexSessionKeyPair,
buildGdexSignInMessage,
GDEX_API_KEY_PRIMARY,
} from '@gemachdao/gdex-skill';
// Step 1: generate your EVM control wallet (one-time setup)
const wallet = generateEvmWallet();
console.log(wallet.address); // '0xAbCd...' (checksummed) — safe to share
// ⚠️ Store wallet.privateKey and wallet.mnemonic securely
// Step 2: generate a session keypair for managed-custody trading
const { sessionPrivateKey, sessionKey } = generateGdexSessionKeyPair();
// Step 3: build the sign-in message and sign with your control wallet
const message = buildGdexSignInMessage(wallet.address, String(Date.now()), sessionKey);
// Sign with: new ethers.Wallet(wallet.privateKey).signMessage(message)
// Step 4: submit sign_in computedData (see Managed-Custody Trading section above)
// The backend provisions Solana + all other trading wallets server-side🌐 Supported Chains
Chain | ChainId | Native Token | DEXes |
Ethereum |
| ETH | Uniswap V2/V3, Odos |
Optimism |
| ETH | Uniswap V3, Odos |
BNB Smart Chain |
| BNB | PancakeSwap, Odos |
Sonic |
| S | — |
Fraxtal |
| frxETH | Uniswap V3 |
Nibiru |
| NIBI | — |
Base |
| ETH | Uniswap V3, Odos, Arcadia |
Arbitrum One |
| ETH | Uniswap V3, Odos |
Berachain |
| BERA | — |
Solana |
| SOL | Raydium, Raydium V2, Orca |
Sui |
| SUI | Cetus, Bluefin |
HyperLiquid | perps only | USDC | Native perp engine |
The
ChainIdenum is wider than this table. It also defines Avalanche (43114), Polygon (137), zkSync Era (324), Linea (59144), Blast (81457) and Scroll (534352). The backend'ssupportedChainIdsdoes not include them, so calls against those ids will not route. Trade only the chains listed above.
import { ChainId } from '@gemachdao/gdex-skill';
ChainId.ETHEREUM // 1
ChainId.OPTIMISM // 10
ChainId.BSC // 56
ChainId.SONIC // 146
ChainId.FRAXTAL // 252
ChainId.NIBIRU // 6900
ChainId.BASE // 8453
ChainId.ARBITRUM // 42161
ChainId.BERACHAIN // 80094
ChainId.SOLANA // 622112261
ChainId.SUI // 1313131213⚠️ Error Handling
import {
GdexAuthError, // 401/403 — re-authenticate
GdexValidationError, // invalid input params
GdexApiError, // 4xx/5xx backend errors
GdexNetworkError, // connection failures, timeouts
GdexRateLimitError, // 429 — check err.retryAfter
} from '@gemachdao/gdex-skill';
try {
await skill.buyToken({ ... });
} catch (err) {
if (err instanceof GdexRateLimitError) {
console.log(`Rate limited — retry after ${err.retryAfter}s`);
await new Promise(r => setTimeout(r, err.retryAfter * 1000));
// retry…
} else if (err instanceof GdexAuthError) {
skill.loginWithApiKey(GDEX_API_KEY_PRIMARY); // re-auth
} else if (err instanceof GdexValidationError) {
console.error(`Bad param "${err.field}": ${err.message}`);
} else if (err instanceof GdexApiError) {
console.error(`API ${err.statusCode}: ${err.message}`);
} else if (err instanceof GdexNetworkError) {
console.error(`Network (${err.code}): ${err.message}`);
}
}Class | When thrown |
| 401/403, invalid credentials |
| Invalid address, amount, chain, slippage |
| Non-success HTTP (4xx/5xx) |
| Connection refused, ECONNABORTED, timeout |
| HTTP 429 (has |
🛠 Utility Functions
import {
getChainName, // getChainName(8453) → "Base"
getNativeToken, // getNativeToken('solana') → "SOL"
formatTokenAmount, // formatTokenAmount('1000000', 6, 'USDC') → "1 USDC"
formatUsd, // formatUsd('1234.5') → "$1,234.50"
formatPercentChange, // formatPercentChange('5.23') → "+5.23%"
shortenAddress, // shortenAddress('0x1234...') → "0x1234...5678"
validateAddress, // throws GdexValidationError if invalid
validateAmount, // throws GdexValidationError if invalid
validateChain, // throws GdexValidationError if unsupported
} from '@gemachdao/gdex-skill';🧪 Testing
All 103 tests run with mocked HTTP — no real API key or network connection required:
npm test # run all 103 tests
npm run test:coverage # with coverage report
npm run verify # offline SDK smoke-test (20 checks)
npm run verify:managed # managed-custody payload validation (dry-run)Test suites:
tests/client/auth.test.ts— API key auth, EVM/Solana wallet signingtests/actions/spotTrade.test.ts— buy/sell, slippage, validationtests/actions/perpTrade.test.ts— open/close positions, leverage, depositstests/actions/portfolio.test.ts— balances, history, wallet infotests/actions/tokenInfo.test.ts— trending, OHLCV, token details, top traderstests/utils/walletGeneration.test.ts— EVM control wallet generation (offline)tests/utils/gdexManagedCrypto.test.ts— managed-custody crypto helpers (AES, signing, ABI encoding)
🏗 Architecture
AI Agent (Claude Code / Cursor / Codex / ...)
│
│ npx skills add GemachDAO/gdex-skill
│ ──────────────────────────────────
│ SKILL.md → agent skill directory
│
▼
@gemachdao/gdex-skill (this package)
│ TypeScript methods with full type safety
│ @gdexsdk/hyper-liquid-trader for HyperLiquid L1 queries & direct execution
│ Managed-custody: AES-256-CBC encryption + secp256k1 session signing
│ computedData payloads for all trade operations
│ Auto-retry with exponential backoff
│
│ Control Wallet (EVM / Solana)
│ └─ signs once for /v1/sign_in → session keypair
│
▼
Gbot Backend API (https://trade-api.gemach.io/v1)
│ Decrypt computedData → verify signature → resolve nonce (gRPC)
│ NATS JetStream trade queue
│ Server-side managed wallets (custody)
│ DEX aggregation engine
▼
Blockchains (Solana · Sui · Ethereum · Base · Arbitrum · …)HL Managed-Custody Reference
HyperLiquid perp operations use a distinct crypto pipeline from spot trades. Getting any detail wrong produces a 400 Unauthorized (code 103) error. This section documents the exact specification.
HL Deposit Flow
The backend custodially executes the on-chain deposit: it loads the user's server-side private key, constructs an Arbitrum transaction, and sends USDC to the HyperLiquid bridge receiver. The agent only provides an authorization signature.
Agent SDK Backend
──────── ───────
1. ABI-encode deposit params ──► 2. AES-decrypt computedData
(uint64 chainId, address, 3. ABI-decode data
uint256 amount, string nonce) 4. Verify chainId == 42161
2. Sign with session key ──► 5. Verify signature vs stored sessionKey
3. AES-encrypt as computedData ──► 6. Validate token, balance, min deposit
4. POST /v1/hl/deposit 7. Execute ERC-20 transfer on ArbitrumHL ABI Schemas (CRITICAL)
Action | ABI Types | Fields |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WARNING: The
hl_depositchainId usesuint64, NOTuint256. This is the single most common cause of "Unauthorized" errors. The backend re-encodes withuint64for signature verification — if you encode withuint256, the hex differs, signature recovery fails, and you get code 103.
HL Signature Format
All HL write operations sign with the session private key (from sign-in), NOT the control wallet key:
// Message format (no EIP-191 prefix):
const msg = `${action}-${userId.toLowerCase()}-${dataHex}`;
// e.g.: "hl_deposit-0x53d029a6...-00000000000000000000000000000000000000000000000000000000..."
const digest = keccak256(toUtf8Bytes(msg));
const sig = new SigningKey(sessionPrivateKey).sign(digest);
// Output: r(64hex) + s(64hex) + v(2hex) = 130 chars, no 0x prefix
// v = raw recovery parameter (00 or 01), NOT EIP-155 (1b/1c)HL Deposit Constraints
Constraint | Value |
Chain | Arbitrum only (chainId |
Token | USDC only ( |
Amount | In smallest unit (6 decimals): 10 USDC = |
Min deposit | 10 USDC |
Fee buffer | Balance must cover |
Delivery time | ~10 minutes after Arbitrum tx confirms |
Bridge receiver |
|
userId | Control wallet address (from sign-in), NOT managed wallet |
HL Error Codes
Code | Error | Cause |
101 | Missing params |
|
102 | Invalid chainId | chainId is not 42161 |
102 | Invalid params | Nonce already used, or token not supported |
103 | Unauthorized | Signature verification failed — check ABI types ( |
— | Insufficient balance | Managed wallet doesn't have enough USDC + fee on Arbitrum |
— | Too low amount | Amount < 10 USDC |
HTTP Headers (Required)
The backend sits behind Cloudflare. Requests MUST include browser-like headers:
{
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'application/json',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Authorization': 'Bearer <apiKey>', // NOT X-API-Key
}WARNING: Using a non-browser User-Agent (e.g.,
axios/1.xor any string containing bot identifiers) will result in Cloudflare 403 "Access denied". The SDK handles this automatically.
Complete HL Deposit Example
import {
GdexSkill,
GDEX_API_KEY_PRIMARY,
generateGdexSessionKeyPair,
buildGdexSignInMessage,
buildGdexSignInComputedData,
buildHlComputedData,
} from '@gemachdao/gdex-skill';
import { ethers } from 'ethers';
const apiKey = GDEX_API_KEY_PRIMARY;
const skill = new GdexSkill();
skill.loginWithApiKey(apiKey);
// 1. Generate session keypair
const { sessionPrivateKey, sessionKey } = generateGdexSessionKeyPair();
// 2. Sign in (control wallet signs the Terms message)
const controlWallet = new ethers.Wallet('0xYourPrivateKey');
const nonce = String(Date.now());
const message = buildGdexSignInMessage(controlWallet.address, nonce, sessionKey);
const signature = await controlWallet.signMessage(message);
const signInPayload = buildGdexSignInComputedData({
apiKey, userId: controlWallet.address, sessionKey, nonce,
signature: signature.replace(/^0x/, ''),
});
await skill.signInWithComputedData({
computedData: signInPayload.computedData, chainId: 42161,
});
// 3. Deposit USDC (amount in smallest unit, uint64 chainId is handled by SDK)
const computedData = buildHlComputedData({
action: 'hl_deposit',
apiKey,
walletAddress: controlWallet.address, // userId = control wallet
sessionPrivateKey,
actionParams: {
chainId: 42161,
tokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
amount: '10000000', // 10 USDC in smallest unit (6 decimals)
},
});
const result = await skill.client.post('/v1/hl/deposit', { computedData });
// { hash: '0x...', isSuccess: true, amount: '10000000', message: 'Deposit successfully...' }
// Wait ~10 minutes for HyperLiquid to credit the depositContributing
Fork the repository
Create a feature branch
Add tests for new functionality
Run
npm test && npm run build && npm run verifySubmit a pull request
License
MIT © GemachDAO
Available Tools
154 toolsadd_commentC
Post a comment on a token.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| chain | Yes | ||
| userId | No | ||
| message | Yes | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| tokenAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond the annotations – no mention of auth requirements, what gets stored, rate limits, or validation, which is a real gap for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and waste-free, but it is undersized for a 6-parameter mutation tool. Conciseness is achieved at the cost of substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with low schema coverage and no output schema, the description is inadequate: it does not explain how to identify the target (tokenAddress + chain), what the message constraints are, or what happens on success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (just accountRef documented), so the description must compensate, and it does not. It says nothing about tokenAddress, chain, message, data, or userId, leaving five of six parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (post) and resource (comment) with an object (token), so the agent can tell it is a write of a comment. There is no explicit differentiation from the sibling get_comments, but the purpose is otherwise unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites (e.g. auth via accountRef), and does not route the agent versus alternatives like get_comments. Only the bare object 'on a token' is conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
associate_emailA
Link the email claim from a Google ID token to the caller's wallet. Must be called before oauth_login when the wallet has no associated email yet (oauth-login returns 404/code 108). The email is NOT sent by the client — the backend extracts it server-side from the verified Google idToken. computedData must be built with buildAssociateEmailComputedData (managed-custody payload).
| Name | Required | Description | Default |
|---|---|---|---|
| idToken | Yes | Google-issued OIDC ID token (JWT). Backend extracts the email claim from this token. | |
| computedData | Yes | Managed-custody encrypted payload from buildAssociateEmailComputedData. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, open-world, non-destructive mutation. The description adds meaningful behavior: the email is extracted server-side from a verified Google idToken and is not sent by the client, and the operation must precede oauth_login. It does not cover response behavior or idempotency, but the annotations reduce the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then gives the precondition, error condition, data-flow constraint, and build requirement. Every sentence carries operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with annotations and full schema coverage, the description covers purpose, timing, data source, and required payload construction. It does not describe the success response or post-call state, which is a minor gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents both idToken and computedData, including server-side email extraction and the buildAssociateEmailComputedData helper. The description reinforces the security detail that the email is not client-provided, but largely repeats schema semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: linking the email claim from a Google ID token to the caller's wallet. It distinguishes this from oauth_login by explaining the precondition and the error condition that triggers this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: before oauth_login when the wallet has no associated email yet, with the concrete symptom that oauth-login returns 404/code 108. It also names the required helper buildAssociateEmailComputedData, leaving little ambiguity about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_loginA
Authenticate with a GDEX API key. Sets the Bearer token for all subsequent requests.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | GDEX API key (UUID format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark this as non-read-only and non-destructive; the description adds the crucial behavioral fact that the call mutates session-wide state by installing a Bearer token for all later requests. It omits token lifetime/expiry and failure behavior, but the key side effect is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the action is front-loaded and the consequence follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter login tool with a fully documented schema and no output schema, the description covers what the agent needs to call it and why. The remaining gap is disambiguation from the other sign-in tools in the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ("GDEX API key (UUID format)"), so the schema carries the semantics. The description adds nothing about the key beyond what the schema already says, which matches the baseline of 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (authenticate) and the credential type (GDEX API key), so the agent knows exactly what this does. It does not, however, differentiate itself from sibling auth tools such as oauth_login, managed_sign_in, or generate_session_keypair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Sets the Bearer token for all subsequent requests" implies this must be called before other tools, which is useful sequencing guidance. But it never states when to prefer it over oauth_login or managed_sign_in, nor what happens if called again with a different key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_sign_in_payloadARead-only
Build the encrypted sign-in computedData payload from raw credentials. Returns the payload to use with managed_sign_in.
| Name | Required | Description | Default |
|---|---|---|---|
| nonce | Yes | Unique nonce string | |
| apiKey | Yes | GDEX API key | |
| userId | Yes | Control wallet address | |
| signature | Yes | EVM/Solana wallet signature of the sign-in message | |
| sessionKey | Yes | Session public key (0x + 66 hex) | |
| refSourceCode | No | Optional referral code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with readOnlyHint=true and openWorldHint=false — it only assembles an encrypted payload locally rather than performing sign-in. Beyond that it adds little: no statement about side effects, determinism, or that the wallet signature must already exist before calling. With annotations carrying the safety profile, a 3 fits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first defines the operation, the second routes the result to the consumer tool. Purpose is front-loaded with zero padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description says only "Returns the payload" without characterizing the computedData object an agent must pass to managed_sign_in. For a 6-parameter builder feeding a downstream call, that return-value gap and the missing provenance of nonce/signature leave it only minimally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (five required) are documented in the schema itself. The description's phrase "from raw credentials" only gestures at the input set and adds no format or dependency detail beyond what the schema provides — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: "Build the encrypted sign-in computedData payload from raw credentials." The second sentence disambiguates it from its close sibling managed_sign_in by positioning this tool as the payload producer, not the sign-in executor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Returns the payload to use with managed_sign_in" gives clear flow guidance — build first, then submit with managed_sign_in. It stops short of naming where nonce/signature/sessionKey come from (e.g. generate_session_keypair) or when an alternative auth path (auth_login, oauth_login) applies, so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_trade_payloadBRead-only
Build an encrypted managed-custody trade computedData payload from raw credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| nonce | Yes | Unique nonce | |
| action | Yes | Trade action | |
| amount | Yes | Trade amount | |
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| tokenAddress | Yes | Token contract address | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the agent knows this is a side-effect-free computation. The description adds that the output is an encrypted computedData payload composed from credentials, but is silent on secret handling and on how the payload is subsequently consumed. Note: 'raw credentials' sits in mild tension with the accountRef schema note that no secret is passed in chat, though this is a schema annotation, not an annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and the output artifact front-loaded and no filler. It is appropriately sized for a one-line builder, though a brief pointer to the next step could have been added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter builder with no output schema, the description should explain what the computedData payload is and how to use it (e.g., feed it into an execute tool). It names the artifact but leaves its shape and downstream usage unspecified, which is a meaningful gap given there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters (action enum, nonce, amount, tokenAddress, apiKey, accountRef, etc.) are already documented in the schema. The description adds no syntax, format, or constraint detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Build) and a specific resource (an encrypted managed-custody trade computedData payload) plus the input nature (raw credentials). An agent can distinguish it from execution siblings like gdex_execute_trade, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no mention of the likely downstream step (executing the payload) or of alternatives such as gdex_execute_trade. The builder-vs-executor relationship is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_tokenADestructive
Buy a token with the chain's native token from the managed GDEX wallet (session-signed purchase_v2). Chains: Ethereum 1, Optimism 10, BSC 56, Sonic 146, Fraxtal 252, Robinhood 4663, Base 8453, Arbitrum 42161, Solana. Returns a requestId; follow it with wait_for_trade. To pay with USDC use usdc_buy.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | Not supported: the backend picks the route. Rejected when set. | |
| chain | Yes | Chain: 'solana', 'base', or a chain id (8453=Base, 42161=Arbitrum) | |
| amount | Yes | Native token to spend, e.g. '0.1' for 0.1 SOL; converted exactly to native decimals | |
| apiKey | No | GDEX API key used to encrypt the signed trade | |
| referrer | No | Not supported by purchase_v2/sell_v2. Rejected when set. | |
| slippage | No | Slippage percent, Solana and Sui only (sent as bps, max 50). Rejected on EVM, where the account's stored slippage applies. Omit to use the stored setting. | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| inputToken | No | Omit, or the chain's native token. Anything else is rejected (use usdc_buy for USDC). | |
| priorityFee | No | Solana priority fee in lamports (integer, max 50000000 = 0.05 SOL). Solana only. | |
| tokenAddress | Yes | Contract address (mint on Solana) of the token to buy | |
| walletAddress | No | Control wallet address (the GDEX userId) | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true and openWorldHint=true already declared, the description still adds real value: it discloses the async request/confirm pattern via requestId and wait_for_trade, and that the wallet is managed/session-signed rather than a raw key. It does not state that native funds are irreversibly spent on a DEX route or what happens on a failed fill, which for a destructive trade tool is a notable omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and mechanism, then chains, then the follow-up step and the alternative. The chain list is long but functional; almost nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter destructive trade tool with no output schema, the description covers the essential operating picture: supported chains, wallet model, async completion path, and the USDC alternative. Remaining gaps (failure/refund behavior, prerequisite connection via accountRef) are modest given how much the schema and annotations already carry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter documentation is already carried by the schema (including the dex/referrer rejection notes and slippage constraints). The description adds only the inputToken restriction implicitly ('with the chain's native token'), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Buy a token') plus the payment asset ('with the chain's native token') and the wallet/mechanism ('managed GDEX wallet, session-signed purchase_v2'). It enumerates supported chains and explicitly disambiguates from usdc_buy, so an agent can tell it apart from its buy siblings without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear routing rule ('To pay with USDC use usdc_buy') and a mandated next step ('Returns a requestId; follow it with wait_for_trade'). However, it says nothing about when to prefer limit_buy, managed_purchase, or execute_spot over this tool, so the broader alternative landscape is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_all_perp_ordersBDestructive
Cancel all open perp orders on HyperLiquid.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. Beyond that the description adds nothing: it does not say the cancellation is irreversible, which account's orders are affected, whether it spans all markets, or what the agent gets back. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the destructive scope ('all open perp orders') appears immediately. Nothing to trim, nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimally adequate for a destructive bulk-cancel: the schema carries 100% parameter documentation and annotations carry the safety profile, and no output schema exists to explain. However, with zero required parameters declared, the description should have clarified the auth/account binding (accountRef vs walletAddress) and the blast radius of 'all'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameter detail (nothing about accountRef, walletAddress, apiKey, or sessionPrivateKey). Baseline 3 applies: the schema fully documents the parameters, so the description neither helps nor hurts here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Cancel), resource (open perp orders), scope (all), and venue (HyperLiquid) in one sentence. The 'all' explicitly separates it from the sibling cancel_perp_order, so an agent can route between the bulk and single-order tools without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use framing at all: nothing says when to prefer this over cancel_perp_order, close_all_positions, or direct_cancel_order, and no prerequisite (e.g. needing a connected account or active session) is mentioned. The only guidance is implicit in the word 'all'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_perp_orderCDestructive
Cancel a specific open perp order on HyperLiquid.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| apiKey | No | GDEX API key for AES encryption | |
| orderId | Yes | Order ID to cancel | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the destructive write profile is covered structurally. The description adds only the word 'open' and says nothing about irreversibility, partial failure, whether an unknown orderId errors or no-ops, or the auth/session requirements implied by the four credential parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste; nothing is buried or redundant. It is efficient, though its brevity is partly under-specification rather than tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, open-world mutation with six parameters including four credential fields and no output schema. The description omits how credentials are supplied, what a successful cancellation returns, and how errors or already-filled orders are handled — significant gaps for a cancel operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the accountRef/credential parameters, so the schema does the heavy lifting. The description contributes no additional meaning about coin formatting, orderId provenance, or how credential parameters combine — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel) and resource (a single open perp order) scoped to HyperLiquid, which separates it from cancel_all_perp_orders and update_order by name alone. It does not explicitly name any sibling, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative routing is given. An agent must infer on its own that this is for a single order while cancel_all_perp_orders handles bulk, and that the order must still be open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_watchlistB
Add or remove a token from the user's watchlist via managed custody. Requires pre-built encrypted computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Optional chain id hint | |
| computedData | Yes | Encrypted computedData payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, open-world mutation, so the safety profile is covered. The description usefully adds that operations run through managed custody and need a pre-built payload, but says nothing about auth requirements, error behavior when removing a token not on the list, or whether the change is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation front-loaded and the prerequisite second; nothing is redundant. It is arguably under-specified rather than over-long, which is the better failure mode here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and a mandatory encrypted payload, the definition never tells the agent how to obtain the pre-built computedData (no pointer to a build/skill/guide sibling). Combined with no return-value or error context, this leaves a real gap for correct invocation, though the annotations cover the safety dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both computedData and the optional chainId are documented in the schema. The description only adds the qualifier "pre-built" for computedData, which is a marginal gain over "Encrypted computedData payload" and gives no guidance on how that payload is produced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (add/remove) and the exact resource (the user's watchlist), so the agent knows this is a watchlist mutation tool. It stops short of naming the read-only sibling get_watchlist as the alternative, so differentiation relies on the agent inferring from the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Requires pre-built encrypted computedData" gives one real prerequisite, which is more than most definitions offer. However, there is no explicit statement of when to prefer this over get_watchlist or other token tools (import_token, get_token_details), leaving the choice implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_all_positionsADestructive
Close all open perpetual positions on HyperLiquid. Known unreliable: the backend endpoint frequently returns TIMEOUT or 400 / JSON parse errors. Prefer close_perp_position per coin.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context the annotations cannot convey: the backend frequently fails with TIMEOUT or 400/JSON parse errors. It does not say whether partial closes can occur or whether retries are safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose first, then the caveat and the alternative. Nothing is wasted and the critical warning is not buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk-close operation with no output schema, it covers purpose, reliability risk, and the safer alternative. An agent would still want to know execution semantics (market order? partial failure behavior?) but the essential information for choosing and invoking it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (apiKey, accountRef, walletAddress, sessionPrivateKey) are already documented. The description adds nothing about them, which is acceptable at full coverage but is baseline, not value-add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Close all open perpetual positions on HyperLiquid') and makes the all-vs-single distinction explicit by naming close_perp_position. An agent can immediately tell it apart from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the alternative ('Prefer close_perp_position per coin'), which is strong guidance. It stops short of saying when, if ever, this tool should be used instead, leaving the agent to infer that it is a bulk fallback only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_perp_positionADestructive
Close (fully or partially) one perp position with a reduce-only market order. The side is read from the live HL position: a long is closed with a sell, a short with a buy. Rejects when the position is flat/missing, when size exceeds it, or when a bare coin is open on several builder DEXes.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | Builder DEX for a bare coin, e.g. 'xyz' (omit for the default dex) | |
| coin | Yes | Asset symbol to close; builder-DEX assets as 'dex:ASSET', e.g. 'xyz:TSLA' | |
| size | No | Size to close as a decimal string; omit to close the whole position | |
| price | No | Close price; omit or '0' to use the mark price | |
| apiKey | No | GDEX API key for AES encryption | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| szDecimals | No | Market size decimals (HL meta szDecimals); rejects a size with more decimals | |
| walletAddress | No | Control wallet address | |
| positionAddress | No | Address whose HL account holds the position — normally the MANAGED wallet from sign-in. Defaults to walletAddress. | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and openWorld=true, but the description adds real substance: the order type (reduce-only market), that the side is derived from the live HL position rather than supplied, and the three rejection cases. It omits auth/session prerequisites, though the schema's accountRef/apiKey fields cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what the tool does, then the side-derivation rule, then failure conditions. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 10-parameter mutation tool with no output schema, the description covers the operation, the side logic, and the failure modes; the remaining gaps (fill/return details, session requirements) are largely carried by the annotations and the 100%-covered schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 clarify a genuinely tricky parameter interaction (a bare coin open on several builder DEXes is rejected, and a partial size must not exceed the live position), which is marginally useful but not syntax-level guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Close ... one perp position') plus the exact mechanism ('reduce-only market order'), which cleanly separates it from open_perp_position and close_all_positions in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete rejection conditions (flat/missing position, size exceeding it, bare coin across multiple builder DEXes) that tell the agent when this call will fail, and 'fully or partially' scopes it to a single position. It never names an explicit alternative such as close_all_positions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_copy_tradeBDestructive
Create a new copy trade to auto-mirror a Solana trader's buys/sells. Solana only.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address | |
| buyMode | Yes | 1 = fixed SOL amount, 2 = percentage of trader amount | |
| chainId | Yes | Must be 622112261 (Solana) | |
| copySell | No | Also copy sell trades | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| lossPercent | Yes | Stop-loss percentage (> 0, < 100) | |
| traderWallet | Yes | Solana wallet address of trader to copy | |
| copyBuyAmount | Yes | SOL amount (mode 1) or percentage 0-100 (mode 2) | |
| copyTradeName | Yes | Human-readable label | |
| profitPercent | Yes | Take-profit percentage (> 0) | |
| sessionPrivateKey | No | Session private key from sign-in | |
| excludedDexNumbers | No | DEX numbers to exclude | |
| isBuyExistingToken | No | Buy tokens already held by trader |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the meaningful behavioral fact that this sets up continuous auto-mirroring of another trader's buys/sells, but it never discloses that real funds are committed, that loss/profit thresholds stop the mirroring, or that an authenticated account is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the core action front-loaded and the platform constraint immediately after. Nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, open-world mutation with 14 parameters (7 required) and no output schema; the description is far too thin for that weight. It omits the authentication path (accountRef/gdex_connect), the implication that live trading starts immediately, and any mention of how the required risk parameters govern behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 14 parameters are documented in the schema itself. The description adds no extra meaning about buy modes, stop-loss/take-profit interaction, or how accountRef replaces raw secrets, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new copy trade') plus its effect ('auto-mirror a Solana trader's buys/sells'), and the 'Solana only' clause implicitly separates it from the sibling create_hl_copy_trade. It's clear, though the sibling differentiation is by inference rather than by naming the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Solana only' constraint tells the agent when this tool applies versus the HL equivalents, but there is no explicit guidance on prerequisites (gdex_connect/accountRef, chainId 622112261), no named alternatives, and no when-not-to-use conditions. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_hl_copy_tradeCDestructive
Create a new HL perp copy trade. Copies a trader's long/short perpetual positions.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address | |
| copyMode | Yes | 1 = Fixed USD per order, 2 = Proportion of trader size | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| lossPercent | Yes | Stop-loss percentage (> 0, < 100) | |
| oppositeCopy | No | Short when trader goes long | |
| traderWallet | Yes | EVM address of the trader to copy | |
| copyTradeName | Yes | Human-readable label | |
| profitPercent | Yes | Take-profit percentage (> 0) | |
| sessionPrivateKey | No | Session private key from sign-in | |
| fixedAmountCostPerOrder | Yes | USD amount (mode 1) or ratio (mode 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the risk profile is known. The description adds no behavioral context beyond them: it does not say that this begins live copying and commits funds, that credentials (accountRef/apiKey/sessionPrivateKey) are required, or whether the trade can be edited afterward. For a destructive mutation with 11 parameters, that is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource. The second sentence is mildly redundant with 'copy trade' in the name but does add the long/short perpetual qualifier, so it earns most of its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world creation tool with 11 parameters, no output schema, and auth-via-accountRef flow, the description omits the setup path (gdex_connect / sign-in), confirmation semantics, and what happens after creation. It names the operation but leaves an agent under-informed about safe invocation of a high-consequence call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 11 parameters including copyMode, lossPercent, profitPercent, oppositeCopy, and accountRef are documented in the schema itself. The description adds only the general notion of long/short copying, which loosely maps to oppositeCopy but explains nothing about mode semantics or risk percentages. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new HL perp copy trade') and clarifies with 'Copies a trader's long/short perpetual positions,' which distinguishes it from the spot-oriented create_copy_trade sibling by naming the HL perp domain. It does not explicitly say how it differs from create_copy_trade or update_hl_copy_trade, leaving the agent to infer scope from the 'HL perp' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus create_copy_trade, update_hl_copy_trade, or the related pause/resume tools, and no prerequisites are stated. The agent must discover on its own that this is the creation path for a new perp copy-trade subscription rather than a modification of an existing one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_copy_tradeADestructive
PERMANENTLY delete a Solana copy trade configuration. Does NOT sell the positions it opened and does NOT cancel their TP/SL limit orders; manage those separately. Cannot be undone. To stop copying temporarily use pause_copy_trade instead.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_copy_trade_list) | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes well beyond that: it states irreversibility ('Cannot be undone') and, critically, enumerates the side effects that do NOT occur (positions not sold, TP/SL orders not cancelled). That non-effect disclosure is genuinely load-bearing information an agent cannot infer from the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the irreversible nature and the verb in caps. Every sentence carries distinct information: scope, side-effect boundary, reversibility, and alternative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter destructive tool with full schema coverage and annotations, this covers the gaps that matter: permanence, what survives the delete, and the safer alternative. No output schema is needed since there is no meaningful return to explain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the copyTradeId provenance ('from get_copy_trade_list') and the accountRef session mechanism are already documented in the schema. The description adds no parameter-level detail, which is acceptable given full schema coverage but earns only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (PERMANENTLY delete) and a precisely scoped resource (a Solana copy trade configuration), and immediately disambiguates what is NOT touched (positions, TP/SL orders). An agent can distinguish this from pause_copy_trade or delete_hl_copy_trade without reading further.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for the 'stop copying' intent (pause_copy_trade instead) and states that positions and TP/SL orders must be managed separately, which is a real exclusion condition. Usage routing is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_hl_copy_tradeADestructive
PERMANENTLY delete an HL perp copy trade configuration. Does NOT close the perp positions it opened and does NOT cancel their TP/SL orders; close them with the perp tools if wanted. Cannot be undone. To stop copying temporarily use pause_hl_copy_trade instead.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_hl_copy_trade_list) | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructive=true; the description adds the critical blast radius — positions stay open, TP/SL orders are not cancelled, and the action is irreversible. This is exactly the behavioral detail an agent needs before calling a destructive delete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads PERMANENTLY, then separates consequences (positions/orders) from irreversibility and the alternative in distinct, waste-free sentences. Every sentence carries unique information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive delete with no output schema, the description covers purpose, irreversibility, side-effect boundaries, and the alternative. Nothing an agent needs for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented (copyTradeId even cites get_hl_copy_trade_list). The description adds no further parameter syntax or meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (HL perp copy trade configuration) with explicit permanence emphasis. The distinction from pause_hl_copy_trade is named, so an agent can route without opening a sibling schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: delete for permanent removal, pause_hl_copy_trade for temporary stop. Also directs the agent to the perp tools for closing positions/orders, covering the follow-up action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
direct_cancel_orderBDestructive
Cancel an open order directly with a private key on HyperLiquid.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| orderId | Yes | Order ID (numeric) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| privateKey | No | Wallet private key (hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the operation destructive, non-read-only, and open-world. The description adds useful auth context by saying the cancellation is performed directly with a private key on HyperLiquid, but it does not explain irreversibility, failure behavior, or why one would use privateKey versus accountRef.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no redundant words. Its brevity is appropriate, and any missing detail is a completeness issue rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive trading mutation, the description gives the essential action, venue, and auth method. However, it omits important operational context such as when to use accountRef instead of privateKey, what kind of open order is meant, and what the agent should expect after cancellation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 coin, orderId, accountRef, and privateKey. The description only reinforces the private-key path and adds no syntax, constraints, or meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (cancel), resource (open order), platform (HyperLiquid), and auth method (private key), so the tool's basic purpose is clear. It does not explicitly differentiate itself from sibling cancellation tools such as cancel_perp_order, cancel_all_perp_orders, or hl_cancel_outcome_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no when-not-to-use guidance, and no named alternatives. The word 'directly' hints at a direct private-key signing path, but the agent must infer when to choose this over managed or session-based cancellation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_bridgeARead-only
Get a cross-chain bridge quote without executing. Returns estimated output, provider, and time.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in raw units | |
| toChainId | Yes | Destination chain ID | |
| fromChainId | Yes | Source chain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so 'without executing' largely restates the safety profile. It does add useful return context (estimated output, provider, time) in the absence of an output schema, but says nothing about quote staleness, rate limits, or fees beyond the headline fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and scope, followed by return shape. No filler or redundant restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool with no output schema, the description covers purpose and return fields adequately. Minor gaps remain around quote validity/expiry and whether execution must follow promptly, which matter for a bridge quote workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (amount in raw units, source/destination chain IDs), so the schema does the parameter work. The description adds no unit conventions or constraints of its own, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get a cross-chain bridge quote') on a specific resource, and immediately scopes it as non-executing. The phrase 'without executing' implicitly separates it from the execute_bridge sibling, so an agent can pick between quote and execution without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use: fetching a quote when no execution is desired. The counterpart (executing a bridge) is implied rather than named, and no prerequisites or exclusions (e.g., quote expiry, minimum amounts) are stated, so it is clear but not fully routing-grade.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_bridgeADestructive
Execute a cross-chain bridge transaction. Requires managed-custody auth.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in raw units | |
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address | |
| toChainId | Yes | Destination chain ID | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| fromChainId | Yes | Source chain ID | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds the managed-custody auth prerequisite, which is genuine extra context, but omits what funds movement is irreversible, failure/rollback behavior, and how the session-key vs apiKey paths differ.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, prerequisite second. No waste whatsoever.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world, 7-parameter transaction with no output schema, the description is thin: no mention of required ordering with gdex_connect, no fee/slippage or irreversible-funds warning, and no guidance on the auth variants implied by apiKey/sessionPrivateKey. Schema and annotations cover the rest, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (7 params, all documented), so the schema itself carries the heavy lifting — including accountRef's explanation of how it supplies session key and API key without passing secrets in chat. The description adds no parameter meaning beyond the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Execute a cross-chain bridge transaction'), which is clearly a mutating action. However it does not distinguish itself from near-identical siblings such as usdc_execute_bridge or estimate_bridge, so an agent must open the schema to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires managed-custody auth' gives a precondition, which is more than most mutating tools provide. But it never says when to use this bridge versus estimate_bridge (preview) or usdc_execute_bridge, nor what to do first (e.g. gdex_connect).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_cross_perpADestructive
Execute a cross-margin perpetual trade directly with a private key (no managed custody). Supports TP/SL and builder fees.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol, e.g. 'BTC' | |
| price | Yes | Price in USD | |
| isLong | Yes | True for long, false for short | |
| isMarket | No | True for market, false for limit | |
| leverage | No | Leverage for cross-margin (calls updateLeverage before placing) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| privateKey | No | Wallet private key (hex) | |
| reduceOnly | No | ||
| positionSize | Yes | Position size | |
| stopLossPrice | No | Stop-loss price | |
| builderFeeRate | No | Builder fee rate in basis points | |
| stopLossTrigger | No | Stop-loss trigger price | |
| takeProfitPrice | No | Take-profit price | |
| builderFeeAddress | No | Builder fee wallet address | |
| takeProfitTrigger | No | Take-profit trigger price |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, openWorld=true, and readOnly=false, so the safety profile is covered. The description adds useful context about custody mode (private key, no managed custody) and feature support (TP/SL, builder fees), but does not cover risk, reversibility, or auth flow details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and followed by key features. No wasted words, though the second sentence is a brief feature list rather than deeper guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive trade tool with 15 parameters and no output schema, the description is somewhat sparse. The schema covers parameter details, but the description does not clarify the relationship between privateKey and accountRef, nor what execution returns, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 93%, so the schema already documents nearly all parameters. The description mentions TP/SL and builder fees but adds no syntax or format guidance beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute a cross-margin perpetual trade') and distinguishes itself from sibling execute_isolated_perp via 'cross-margin' and from managed tools via 'directly with a private key (no managed custody)'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a usage condition (private key, no managed custody) but does not explicitly say when to choose this over alternatives like execute_isolated_perp, open_perp_position, or managed tools. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_isolated_perpCDestructive
Execute an isolated-margin perpetual trade directly with a private key. Requires explicit leverage.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| price | Yes | Price in USD | |
| isLong | Yes | True for long, false for short | |
| isMarket | No | ||
| leverage | Yes | Leverage (required for isolated margin) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| privateKey | No | Wallet private key (hex) | |
| reduceOnly | No | ||
| positionSize | Yes | Position size | |
| stopLossPrice | No | ||
| builderFeeRate | No | ||
| stopLossTrigger | No | ||
| takeProfitPrice | No | ||
| builderFeeAddress | No | ||
| takeProfitTrigger | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is known. The description adds the auth mechanism ('with a private key'), which is useful, but it omits critical trade behavior: irreversibility, funds at risk, how reduceOnly/stopLoss/takeProfit interact, and that accountRef is an alternative to passing a secret. Worse, saying it requires a private key conflicts with the schema, where privateKey is optional and accountRef can supply credentials instead.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the action, which is good. But for a 15-parameter destructive trading tool it is under-specified rather than truly concise, and the second sentence duplicates information already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex, destructive, open-world trading tool with 15 parameters and no output schema. The description omits risk warnings, credential handling (privateKey vs accountRef from gdex_connect), order-type semantics (isMarket vs price), and any indication of what happens on success or failure, leaving the agent materially under-informed for a high-stakes call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 47% across 15 parameters, so the description is expected to compensate. Instead, its only parameter-related statement ('Requires explicit leverage') merely repeats the schema's own leverage description and says nothing about coin, isLong, price, positionSize, reduceOnly, stop-loss/take-profit, builder fee fields, or the privateKey-versus-accountRef choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Execute an isolated-margin perpetual trade'), and the 'isolated-margin' qualifier distinguishes it from execute_cross_perp. It does not, however, clarify how it relates to similarly named siblings such as open_perp_position, place_perp_order, or gdex_execute_trade, leaving ambiguity about which perp entry point to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Directly with a private key' and 'Requires explicit leverage' imply some preconditions, but there is no explicit guidance on when to use this tool versus execute_cross_perp, open_perp_position, or place_perp_order. The agent is left to infer the selection criteria from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_spotCDestructive
Execute a spot trade directly on HyperLiquid with a private key.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| size | Yes | Trade size | |
| isBuy | Yes | True for buy, false for sell | |
| price | Yes | Price | |
| isMarket | No | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| privateKey | No | Wallet private key (hex) | |
| builderFeeRate | No | ||
| builderFeeAddress | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the description's useful additions are limited to the fact that execution is direct/on-venue and requires a private key. It says nothing about irreversibility, fee handling (builderFeeRate), slippage or failure behavior, which matter for a destructive trade call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the terseness borders on under-specification for a destructive trading tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, two auth paths, no output schema and a destructive annotation, an agent still lacks guidance on order semantics (market vs limit), price handling for market orders, fees, and what the call returns. The description covers only the venue and the key requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description adds no parameter meaning beyond the auth hint. It ignores the important nuance that accountRef is the secret-free alternative to passing privateKey in chat, and does not explain how isMarket (default true) interacts with the required price field or what builderFeeRate/builderFeeAddress do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource+venue: 'Execute a spot trade directly on HyperLiquid'. This distinguishes it reasonably from execute_cross_perp / execute_isolated_perp, though it never explains how it relates to siblings like gdex_execute_trade, limit_buy or managed_purchase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'directly' hints at a self-custody path, but there is no explicit statement of when to use this instead of gdex_execute_trade, limit_buy/limit_sell, or the managed_* tools. No preconditions (funding, session key, whitelisting) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_workflowBRead-only
Explain an end-to-end GDEX trading workflow with step-by-step instructions and code.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow | Yes | The workflow to explain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true and openWorldHint=false annotations already establish that this is a safe, closed-domain read, so the bar is lower. The description does add value beyond them by disclosing the shape of the return (step-by-step instructions plus code), which matters because there is no output schema. It stops short of stating length, depth, or how it differs from the other guide tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, no filler and nothing redundant. Every clause (end-to-end, step-by-step, with code) adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-enum-parameter tool with no output schema, the definition is adequate: safety is covered by annotations, the enum is fully documented, and the return format is hinted at. The missing piece is routing context against the numerous sibling documentation tools, which leaves the agent guessing when to choose this one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage and a fully enumerated value set, so the schema carries the semantics. The description adds nothing about the enum values or what each workflow explanation contains, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Explain") and resource ("end-to-end GDEX trading workflow") plus what the output contains (step-by-step instructions and code). It does not, however, distinguish itself from the many adjacent guide/doc siblings such as get_trading_guide, get_copy_trade_guide, get_component_guide, and search_gdex_docs, so an agent cannot tell on description alone which documentation tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no named alternative, despite a crowded sibling space of overlapping guide tools. The eleven workflow enum values imply a scope but the description never says when this is preferable to get_trading_guide or search_gdex_docs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_accountsARead-only
List accounts connected on this machine (accountRef, control wallet, managed wallets, session age). No secrets are returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, closed-world safety profile, so the description's added disclosure that 'No secrets are returned' is genuine extra value for an agent handling credentials. It also enumerates what the response contains, which annotations alone would not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with the return fields in a tight parenthetical. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the key returned fields and rules out secrets. A slightly fuller picture of the return shape (e.g. one vs many accounts, session-age units) would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing to document and the baseline for a zero-param tool applies. The description correctly does not waste space on parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List accounts connected on this machine', then enumerates the returned fields (accountRef, control wallet, managed wallets, session age). This clearly separates it from sibling read tools like get_wallet_info or gdex_status, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'connected on this machine' implicitly scopes usage to local session state (presumably after gdex_connect), but there is no explicit when-to-use, when-not-to-use, or alternative tool named. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_connectA
Connect a GDEX trading account without putting any secret in the conversation. Signs in from a control-wallet key file on this machine (keyFile), or creates a new local wallet (create: true), or refreshes an existing accountRef. Returns an accountRef plus public addresses; pass accountRef to any trading tool instead of sessionPrivateKey/privateKey. Never ask the user to paste a private key or seed phrase.
| Name | Required | Description | Default |
|---|---|---|---|
| create | No | Create and store a new local control wallet (it starts unfunded) | |
| keyFile | No | Path to a local JSON key file ({ privateKey } or { control: { privateKey } }) | |
| accountRef | No | Refresh the session of an already connected account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the write/network profile is partially covered. The description adds meaningful context beyond that: it discloses the return payload (accountRef plus public addresses), explains that the credential stays local rather than in the conversation, and implies a persistent credential store. It does not describe failure modes or whether connectivity to the exchange is required at connect time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler; the security constraint and the three modes are front-loaded before the downstream routing advice. The long middle sentence is dense with necessary branching detail rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by stating what is returned (accountRef plus public addresses) and how to use it downstream. For a connection/auth tool with full annotation coverage and full schema coverage, nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes beyond the schema by tying each parameter to a mutually exclusive intent (keyFile = sign in, create:true = make a new unfunded local wallet, accountRef = refresh an existing session) and by clarifying that accountRef is the token forwarded to all downstream trading tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (connect a GDEX trading account) and immediately names the three distinct modes of operation, which is enough for an agent to distinguish it from sibling auth tools such as auth_login, managed_sign_in, or generate_session_keypair. The security framing ('without putting any secret in the conversation') further separates it from tools that handle raw keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use guidance per parameter branch (keyFile to sign in from a key file, create:true for a new local wallet, accountRef to refresh) plus the routing rule that accountRef should be passed to any trading tool instead of sessionPrivateKey/privateKey. It also states a hard negative ('Never ask the user to paste a private key or seed phrase'). It stops short of explicitly contrasting against sibling connection tools like gdex_accounts or gdex_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_disconnectADestructive
Forget a connected account on this machine (deletes its stored keys). Funds are not affected; reconnect later with gdex_connect and the key file.
| Name | Required | Description | Default |
|---|---|---|---|
| accountRef | Yes | Account to forget |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds genuinely useful context beyond that: the destruction is scoped to local key material, funds are unaffected, and the action is reversible via gdex_connect. It does not cover error cases (e.g. unknown accountRef).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, with a parenthetical that clarifies scope and a trailing clause that covers safety and recovery. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with annotations covering the safety profile and no output schema, the description supplies the key missing pieces: what is deleted, that funds are safe, and how to undo it. Minor gaps remain around failure behavior for an invalid accountRef.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage ('Account to forget'), so the schema carries the semantics. The description adds no format or identifier guidance beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Forget') and resource ('a connected account on this machine') and immediately clarifies the mechanism (deletes its stored keys). It is easily distinguished from siblings like gdex_connect and gdex_accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this to remove a locally stored account, and it names the follow-up path (reconnect later with gdex_connect and the key file). It does not state explicit exclusions or when-not-to-use, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_execute_tradeADestructive
Execute a preview within the user's authority: userApproved=true only after the user approved THIS preview's terms; otherwise the account's delegated policy must allow it (else status denied). Re-quotes first: moved or expired terms return status revised with a new preview instead of trading. Returns an operation; follow it with gdex_operation. Never call again for the same intent after submission_unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| previewId | Yes | ||
| userApproved | No | True only if the user explicitly approved this exact preview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/openWorldHint annotations, it discloses non-obvious behavior: it re-quotes first, moved/expired terms return status 'revised' with a new preview instead of trading, and the outcome statuses (denied, revised, submission_unknown). These are real behavioral traits an agent needs to avoid double-submitting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core action and approval condition lead, followed by re-quote behavior and the follow-up/retry rules. Every clause carries information, though the single packed paragraph could be broken up for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so at a high level ('Returns an operation; follow it with gdex_operation') while enumerating the possible statuses. It is nearly complete for a 2-param mutation tool, missing only a fuller account of the success payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (previewId has no schema description), so the description must compensate. It clearly defines userApproved semantics ('only after the user approved THIS preview's terms'), adding meaning beyond the schema, and previewId's meaning is implied by the preview-flow context, though not spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Execute a preview') and ties it to the preview-based flow, which distinguishes it from the direct execute_* siblings (execute_spot, execute_cross_perp) and from gdex_preview_trade that creates the preview. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions: userApproved=true only after the user approved THIS preview, otherwise the delegated policy must allow it; and explicit follow-up ('follow it with gdex_operation') and a when-not rule ('Never call again for the same intent after submission_unknown'). This is actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_manage_positionARead-only
Preview an exit for an existing position, against its live state: close/reduce a perp (reduce-only, correct side for longs and shorts) or sell a spot token back to USDC. Returns a preview; execute it with gdex_execute_trade.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | ||
| coin | No | perp coin for close/reduce | |
| size | No | reduce: contracts to close | |
| chain | No | sell: chain | |
| action | Yes | ||
| amount | No | sell: token amount | |
| accountRef | Yes | ||
| slippagePct | No | ||
| tokenAddress | No | sell: token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and the description is consistent with a non-mutating preview ('Returns a preview; execute it with gdex_execute_trade'). It adds real behavioral context beyond the annotations: the preview runs 'against its live state', the close/reduce is reduce-only, and it handles the correct side for both longs and shorts. It does not describe slippage handling or failure conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with the core purpose front-loaded and the execution handoff at the end. Every clause earns its place, though the density means no clause is elaborated enough to fully document the action branches.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema, the definition covers the high-level flow and confirms a preview is returned, which is the most important thing an agent needs to know. But it leaves half the parameters (dex, accountRef, slippagePct, amount/tokenAddress pairing) unexplained and gives no detail about the preview payload the agent must inspect before executing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so several parameters (dex, accountRef, slippagePct) are undocumented in both places. The description does map the action semantics (close/reduce -> perp, sell -> spot) which helps interpret the enum, but it adds no syntax or format detail beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Preview an exit for an existing position') and splits the two supported cases explicitly: close/reduce a perp vs sell a spot token back to USDC. It names the sibling that performs the follow-up action (gdex_execute_trade), so an agent can distinguish it from execution siblings without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: this is the preview step and execution belongs to gdex_execute_trade, giving the agent a workflow. It does not, however, tell the agent when to choose close vs reduce vs sell, nor how it relates to siblings like gdex_preview_trade or close_perp_position, so the routing is only partially resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_operationARead-only
Follow or recover an operation by opId: waits for funding/fill (spot streams funding steps; perps check the live position), resolves submission_unknown by looking for the trade instead of resending, and reports needs_retry when the backend offers an in-place sell retry (usdc_retry_sell). Without opId, lists recent operations.
| Name | Required | Description | Default |
|---|---|---|---|
| opId | No | ||
| waitSec | No | Max seconds to wait, default 60 | |
| accountRef | No | List filter when no opId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the readOnly/openWorld annotations: the call blocks up to waitSec, it deliberately looks up the trade instead of resending when a submission is unknown, and it surfaces needs_retry rather than performing the sell itself. This is exactly the kind of disambiguation that prevents an agent from double-submitting, and nothing contradicts readOnlyHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the primary action, then layers the recovery semantics compactly in a single dense sentence plus a closing fallback clause. The nested parentheticals make it slightly hard to scan, but no clause is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateful polling/reconciliation tool with no output schema and no annotations covering semantics, the description covers both modes, the waiting behavior, and the notable terminal states (funded/filled, submission_unknown, needs_retry). It could still say more about what the listing mode returns, but the critical call-time information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
opId has no schema description, and the description compensates by explaining its dual role: with it the call follows/reconciles a specific operation, without it the call lists recent operations. waitSec and accountRef are already documented in the schema at 67% coverage, so the remaining gap is small.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('follow or recover an operation by opId') plus the alternate listing mode when opId is omitted, so the two shapes of the call are distinguishable. It does not, however, contrast itself with the many similar polling siblings (wait_for_trade, usdc_wait_for_trade, managed_trade_status), and the bare name gdex_operation carries no meaning on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete selection context: use it to follow funding/fill progress, to resolve a submission_unknown result, or to detect a needs_retry state, and use it without opId to list recent operations. It stops short of telling the agent when another polling tool (e.g. wait_for_trade) is the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_positionsARead-only
What the account owns and has pending: unified USDC + gas balances per chain, Hyperliquid positions on every DEX, open orders, and unfinished operations. Each section says ok or unavailable; unavailable means unknown, not empty.
| Name | Required | Description | Default |
|---|---|---|---|
| accountRef | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, openWorldHint), so the description's job is to add non-obvious behavior — and it does: it discloses that each section reports ok or unavailable and that 'unavailable means unknown, not empty', which prevents the agent from misreading partial failures as zero balances. It still omits auth requirements, rate limits, and freshness/caching semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the resource contents and ending with the one caveat that changes how results must be interpreted. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden well by enumerating sections and their status semantics, which is the most important thing for an open-world read tool. It falls short only on the required accountRef argument and on any mention of auth or scope of access.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter accountRef, and the description never mentions it. The agent cannot tell from either source whether accountRef is a wallet address, an internal account id, or a session-scoped handle — a gap that matters for a tool that reads another account's holdings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely and enumerates its parts: unified USDC + gas balances per chain, Hyperliquid positions across every DEX, open orders, and unfinished operations. The aggregation scope ('unified', 'per chain', 'on every DEX') implicitly distinguishes it from narrower siblings such as get_perp_positions, usdc_get_balances, or get_hl_open_orders. An agent can tell what this returns without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no alternative is named, despite many overlapping siblings (get_balances, get_portfolio, get_account_state, get_perp_positions). The agent is left to infer that this is the aggregate snapshot. The second sentence describes output interpretation, not usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdex_preview_tradeARead-only
Turn an explicit trade intent into exact executable terms without trading: market, side, human and raw amounts, quote source and time, minimum received or limit price, funding plan, expiry (60s). Returns a previewId for gdex_execute_trade. kind=spot (USDC wallet), perp_open, perp_close. For perps give notionalUsd (position size) or marginUsd (collateral), never guess which.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | perp_close: builder DEX for a bare coin | |
| coin | No | perp: e.g. BTC, or xyz:TSLA for builder DEXes | |
| kind | Yes | ||
| side | No | spot: buy|sell; perp_open: long|short | |
| size | No | perp_close: contracts to close (omit = full) | |
| chain | No | spot: chain name or id | |
| amount | No | spot: USDC to spend (buy) or token amount (sell) | |
| slPrice | No | perp_open stop-loss | |
| tpPrice | No | perp_open take-profit | |
| leverage | No | perp_open: leverage (backend: cross on core perps, isolated on builder-DEX markets) | |
| marginUsd | No | perp_open: collateral in USD | |
| orderType | No | ||
| accountRef | Yes | From gdex_connect | |
| limitPrice | No | perp_open limit price | |
| autoFunding | No | spot buy: bridge USDC/gas from other chains (default true) | |
| notionalUsd | No | perp_open: position size in USD | |
| slippagePct | No | spot: max slippage %, default 1, max 5 | |
| tokenAddress | No | spot: token contract / mint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds behavior beyond annotations: a 60-second expiry, the returned previewId, and confirmation that no trade occurs. These are concrete, useful traits for an agent planning a trade.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose and return value. Dense but every clause contributes needed information. Slightly run-on first sentence, but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 18 parameters and no output schema, the description covers the return value (previewId) and the most ambiguous parameter choices (kind, notionalUsd vs marginUsd). The schema carries the rest, so the description is sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the baseline is 3. The description adds critical guidance that isn't fully captured in the schema: it distinguishes notionalUsd (position size) from marginUsd (collateral) for perps and warns 'never guess which,' and clarifies the meaning of kind values (spot uses USDC wallet).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-and-resource: 'Turn an explicit trade intent into exact executable terms without trading.' Explicitly distinguishes itself from the execution sibling by noting it returns a previewId for gdex_execute_trade. An agent can immediately tell this is a preview/simulation tool, not an execution tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (gdex_execute_trade) and implies the workflow: preview first, then execute. Provides kind options (spot, perp_open, perp_close) and a rule for perps (give notionalUsd or marginUsd, never guess which). Lacks an explicit 'when not to use' exclusion, 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.
gdex_statusARead-only
Start here. Reports version, connected accounts (no secrets), API reachability, delegated trading policy per account, pending operations, supported trade kinds, and the next setup step.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=true) and external reach (openWorldHint=true), so the description only needs to add context. It does: it discloses that account data is returned without secrets, that policy is reported per account, and that pending operations and setup guidance are included. It omits auth/prerequisite or failure-mode notes, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the routing cue 'Start here' followed by a tight enumeration. Every clause carries information and nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of describing what comes back, and it does so field by field. An agent knows what it will receive and why to call it first, so nothing material is missing for a zero-arg read-only status tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so per the rubric the baseline is 4. The description correctly does not invent parameter semantics and instead describes the response content, which is the right use of space here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Reports') and enumerates exactly what the status covers: version, connected accounts, API reachability, delegated trading policy, pending operations, supported trade kinds, and the next setup step. The opening 'Start here' positions it as the entry-point diagnostic and cleanly separates it from action siblings like gdex_connect, gdex_accounts, and gdex_execute_trade.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start here' gives an explicit trigger for when to call the tool (before doing anything else), and 'the next setup step' hints at the onboarding flow it feeds. It does not name when-not-to-use or a specific alternative diagnostic, so it stops short of the full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_evm_walletARead-only
Generate a new EVM wallet offline (no network call). To trade with it, use gdex_connect { create: true } instead, which stores it locally. Returns only the address unless revealSecrets is true.
| Name | Required | Description | Default |
|---|---|---|---|
| revealSecrets | No | Return privateKey and mnemonic too (they then appear in the conversation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, openWorldHint=false), and the description adds real behavioral detail: it runs offline with no network call, returns only the address by default, and reveals secrets only when asked. It doesn't state whether the wallet is persisted or discarded, which is the one gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero waste, with the defining constraint (offline) front-loaded before the alternative and return behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description tells the agent exactly what comes back (address only, or privateKey/mnemonic with revealSecrets) and when to use a sibling instead. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents revealSecrets including its side effect. The description reinforces the same fact ('Returns only the address unless revealSecrets is true') but adds no new syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a new EVM wallet') plus a distinguishing qualifier ('offline (no network call)'). It clearly separates itself from gdex_connect, which is the persistence/trading path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this for an offline throwaway wallet, but 'use gdex_connect { create: true } instead' when you need to trade with it. When-to-use and the alternative are both named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_pnlCRead-only
Trigger backend PnL generation for a wallet.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| endTime | No | ||
| startTime | No | ||
| walletAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Trigger backend PnL generation', an action verb implying server-side state change or job creation, while the annotations declare readOnlyHint=true. That mismatch is exactly the kind of conflict the annotations are meant to rule out, so it reads as an annotation contradiction rather than added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is efficient, though it is short by omission rather than by disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should carry more of the load, yet it omits return shape, whether generation is synchronous or polled, and the meaning of the three optional parameters. For a four-parameter, zero-coverage tool it is not complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for four parameters, and the description only alludes to walletAddress. It says nothing about what chain accepts (the schema allows string or number), whether startTime/endTime are unix seconds or milliseconds, whether they are optional, or what window is used by default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (trigger/generate), resource (PnL), and scope (a wallet), so the agent understands it produces a PnL report for one address. It does not distinguish itself from nearby siblings such as hl_list_user_copy_pnl, get_wallet_performance, or get_nof1_analytics, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives even though several siblings return PnL/performance data. The agent is left to infer that this is a generation trigger rather than a read of already-computed PnL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_session_keypairARead-only
Advanced/manual signing only: generate a secp256k1 session keypair. Prefer gdex_connect, which signs in and keeps keys on this machine. Returns only the public sessionKey unless revealPrivateKey is true.
| Name | Required | Description | Default |
|---|---|---|---|
| revealPrivateKey | No | Return sessionPrivateKey too (it then appears in the conversation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: only the public key is returned by default, and the private key would end up visible in the conversation. A minor gap remains — it never states explicitly that the key is not persisted locally (only implied by contrast with gdex_connect) nor whether the keypair can be reused after the session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the routing constraint ('Advanced/manual signing only') plus the preferred alternative are front-loaded. Nothing would be lost by trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does state what is returned (public sessionKey, or the private key when opted in), which is the key fact for a caller. It stops short of covering persistence or lifetime of the generated keypair, a small omission for a security-sensitive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single optional boolean, and the schema already explains that revealing it puts the key in the transcript. The description restates that consequence without adding syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('generate a secp256k1 session keypair') and immediately scopes it ('Advanced/manual signing only'), which separates it from signing siblings. It also names the sibling it is not (gdex_connect), so an agent can choose without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('Advanced/manual signing only') and an explicit preferred alternative ('Prefer gdex_connect, which signs in and keeps keys on this machine'). The tradeoff that selects the alternative is stated, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_stateARead-only
Get full HyperLiquid account state: positions, margin, balance, withdrawable amount. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| walletAddress | Yes | Wallet address to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds a genuinely useful trait not present in structured data — 'No auth required' — and, in the absence of an output schema, enumerates what the returned state contains. It does not mention freshness/caching or rate limits, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler; the resource scope and returned fields lead, and the auth note is relegated to a short trailing clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, single-parameter read tool with no output schema, the description covers both what comes back and the auth posture, which is sufficient to call it correctly. The missing piece is routing versus the many sibling account/state tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already explains walletAddress. The description adds no format, chain, or validation detail beyond implying the account belongs to a wallet — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get full HyperLiquid account state') and enumerates the returned content (positions, margin, balance, withdrawable amount). However, it does not distinguish itself from close siblings such as get_hl_clearinghouse_state, get_hl_spot_state, or get_perp_positions, which plausibly return overlapping data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to prefer this over the several sibling state/balance tools (get_hl_clearinghouse_state, get_usdc_balance, get_portfolio). Usage must be inferred from the resource name alone; 'No auth required' is context, not a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_mid_pricesARead-only
Get all current mid prices across all HyperLiquid assets. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful operational fact, 'No auth required', but says nothing about response shape, freshness/staleness of prices, rate limits, or whether assets with no mid price are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the scope ('all HyperLiquid assets') is front-loaded before the operational note about auth. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with annotations covering safety and no output schema, this covers the core need: what it returns, over what universe, and that no credentials are needed. A brief note on return format or price staleness would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4; the schema is an empty object and there is nothing for the description to document. No misleading parameter discussion is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Get all current mid prices') plus an explicit scope ('across all HyperLiquid assets'), so an agent knows exactly what the call returns. It stops short of distinguishing itself from the closely named sibling get_mark_price, so an agent comparing the two still has to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'all current' signals a bulk price snapshot, which suggests calling it when you want a market-wide view rather than a single-asset quote. No explicit when-to-use, when-not, or named alternative (e.g. get_mark_price for a single asset) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_infoARead-only
Get GDEX API endpoint details — URL, method, parameters, and response format.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint | Yes | Endpoint name or keyword (e.g., "buy_token", "hl_create_order", "deposit", "portfolio") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description usefully discloses the shape of the returned data (URL, method, parameters, response format), which goes slightly beyond annotations, but adds nothing about caching, coverage limits, or whether unknown endpoint names error out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource and the returned fields come first, and nothing is repeated from title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with one fully documented parameter and no output schema, the description compensates by naming the return contents (URL, method, parameters, response format), which is roughly what an agent needs to decide to call it. Minor gap: no hint about endpoint-name coverage or failure behavior for unknown keywords.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single endpoint parameter is documented in the schema with concrete examples ("buy_token", "hl_create_order", "deposit", "portfolio"). The description adds no syntax or matching guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (GDEX API endpoint details) and enumerates the returned fields (URL, method, parameters, response format). It is clearly distinct from execution tools like execute_spot, though it does not explicitly contrast itself with sibling doc-lookup tools such as search_gdex_docs or get_sdk_pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers it should call this when it needs to know how to call a GDEX endpoint. No when-to-use condition, prerequisites, or alternative (e.g., search_gdex_docs, get_skill_file) is named, even though several documentation-style siblings exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balancesARead-only
Token balances of the managed GDEX wallet on one chain, optionally one token. [] means the backend reported no holdings; a failed read errors. Native balance: get_trading_funds.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Encrypted session data, instead of sessionPrivateKey + apiKey | |
| chain | Yes | Chain identifier | |
| apiKey | No | GDEX API key (with sessionPrivateKey) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| tokenAddress | No | Optional token filter | |
| walletAddress | No | Control wallet address (the GDEX userId), not the managed trading wallet | |
| sessionPrivateKey | No | Session private key from sign-in (with apiKey) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds real behavioral detail beyond that: '[] means the backend reported no holdings; a failed read errors' discloses empty-result and failure semantics. It stops short of describing auth requirements or what the returned balance fields look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded statements with no filler: the scope comes first, then empty/error semantics, then the sibling hand-off. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully covers return-shape expectations (empty array) and failure behavior, and it disambiguates the managed trading wallet from the control wallet. The auth/session path is left entirely to the schema, which is acceptable given 100% coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters are already documented in the schema; the description only restates the chain and token filters implicitly. Baseline 3 is appropriate since the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: token balances of the managed GDEX wallet on one chain, optionally filtered to one token. It also names the sibling it is not (native balance -> get_trading_funds), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear when-to-use context (managed wallet, single chain, optional token filter) and explicitly routes native-balance queries to get_trading_funds. It does not address other balance-adjacent siblings like usdc_get_balances or get_wallet_info, so no full exclusion set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bigbuysCRead-only
"Big buy" alert feed for a chain — recent large buy transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| chainId | Yes | Chain id, e.g. 622112261 for Solana |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the bar is lower. The description adds that results are a 'recent' feed of 'large' buys for a single chain, but leaves the threshold defining 'big,' ordering, and result volume undefined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler and the key scoping fact (per-chain, recent, large buys) front-loaded. It is efficient, though the brevity leaves real gaps rather than being deliberately minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations covering semantics, the description should explain what qualifies as a 'big buy,' how many records come back, and how ordering works. None of that is present, so an agent cannot predict the result shape or size beyond 'some large recent buys.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: chainId is documented in the schema (with a Solana example) but `limit` has no description anywhere. The description's 'for a chain' merely restates chainId and says nothing about the limit parameter, its default, or valid range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb+resource framing ('Big buy' alert feed) and specifies that it returns recent large buy transactions for a chain, so an agent can tell it apart from generic trade-history tools like get_token_trades or get_hl_trade_history. It stops short of naming any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this feed versus related siblings such as get_token_trades, get_top_traders, or get_token_details, and no prerequisites or exclusions are given. The agent must infer usage from the one-line purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bridge_ordersCRead-only
Get bridge order history for a user. Requires session-key auth.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Encrypted session key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds one useful fact — session-key auth is required — but says nothing about result scope, ordering, or pagination for a history endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose and followed by the auth constraint. Nothing is padded, though the content is thin rather than tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters are optional yet the description doesn't explain what happens when userId/accountRef/data are omitted, nor how the accountRef bundle relates to the other two. With no output schema and a confusing sibling name, that omission leaves real ambiguity, though the full schema coverage keeps it adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters are documented in-schema (data as encrypted session key, userId as control wallet address, accountRef as the gdex_connect-supplied bundle). The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb and resource are clear ('Get bridge order history'), but the tool is nearly indistinguishable from the sibling 'usdc_get_bridge_orders', and the description never explains the difference. An agent reading only this line cannot confidently choose between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a prerequisite ('Requires session-key auth') but gives no when-to-use guidance and no comparison to the near-identical 'usdc_get_bridge_orders' or to 'usdc_get_bridge_status'. The only routing signal is an auth requirement, not a task condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chain_infoARead-only
Get supported chains, chain IDs, DEXes, and capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Optional: filter by chain name (e.g., "solana", "base", "arbitrum"). Omit for all chains. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the useful fact that the payload includes DEXes and capabilities, but discloses nothing further about rate limits, caching, or freshness of the chain list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately sized for a simple no-argument discovery tool, though it is terse enough that it offers little structure beyond the enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-optional-param discovery tool with annotations covering safety and no output schema, the description covers what the agent needs to decide to call it. Missing only minor details such as whether the result is static or refreshed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional 'chain' filter is fully documented in the schema, including examples and the 'omit for all chains' behavior. The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and enumerates the resource contents: supported chains, chain IDs, DEXes, and capabilities. An agent immediately knows this is a reference/discovery tool. It does not explicitly contrast with siblings, but no sibling overlaps this purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the enumeration of what it returns – an agent can infer it should call this when it needs to know supported chains or DEXes before trading. However, there is no explicit when-to-use, no prerequisites, and no mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commentsCRead-only
Get comments for a token.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | Yes | ||
| limit | No | ||
| tokenAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds almost no behavioral context beyond the annotations: it does not explain pagination, ordering, rate limits, authentication needs, or what kind of comments are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, but it is arguably under-specified for a tool with four parameters and no schema descriptions. The concision is appropriate in form but leaves important gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, open-world tool with four parameters, no output schema, and zero schema description coverage, the description is too thin. Annotations cover the safety profile, but the description does not provide enough detail about required inputs, pagination, or returned data for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for four undocumented parameters. It only indirectly implies the tokenAddress parameter via 'for a token' and says nothing about the required chain, page, or limit parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get comments for a token.' It is clear enough to distinguish reading comments from the sibling write tool add_comment, but it does not explicitly differentiate itself from other comment- or sentiment-related siblings such as vote_sentiment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor does it mention prerequisites such as required chain selection or pagination. Usage is only implied by the tool name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_guideBRead-only
Get React UI component patterns for GDEX trading interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
| component | Yes | Component name or category (e.g., "SpotTradeForm", "PositionTable", "portfolio", "theming", "wallet", "page-layouts") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already establish that this is a safe, closed-domain read operation. The description adds no behavioral detail beyond annotations, such as what kind of content is returned, whether it includes code examples, or how the component parameter is interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted words. It states the action and subject immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with annotations, the description is minimally adequate but leaves gaps. It does not explain the return format or clarify when to choose it over other documentation-oriented siblings, and no output schema exists to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, including examples for the single 'component' parameter. The description does not add parameter meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Get') and a specific resource ('React UI component patterns') scoped to 'GDEX trading interfaces.' It is understandable without opening the schema, though it does not explicitly distinguish itself from sibling documentation tools such as get_sdk_pattern or get_trading_guide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, nor any exclusions or prerequisites. The intended use is only weakly implied by the phrase 'React UI component patterns.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_custom_walletsARead-only
Get top 300 wallets ranked by net received. No auth. Cached 2 min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds two facts the annotations do not carry: no authentication is required and results are cached for 2 minutes, which matters for freshness expectations. It stops short of clarifying what 'net received' is denominated in or whether the list is stable across calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core operation front-loaded and the operational caveats (auth, cache) trailing. Nothing repeats the tool name or restates structured data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument read tool this covers the essentials, but with no output schema the agent gets no sense of the return shape — identifier format, whether labels/PnL accompany each wallet, or list ordering ties. The undefined term 'custom wallets' also limits confidence in interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero-parameter tool, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly implies the ranking window is fixed rather than caller-controlled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get top 300 wallets') plus the ranking metric ('ranked by net received'), so the agent knows exactly what comes back. It does not, however, distinguish itself from the closely named sibling get_copy_trade_wallets or explain what makes these wallets 'custom'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_copy_trade_wallets, get_copy_trade_gems, or get_top_traders, all of which sit in the same copy-trade/trader-discovery cluster. The agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_dexesARead-only
List supported DEXes for a chain (e.g. Raydium, Pumpfun on Solana). No auth.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | Yes | Chain ID (622112261 for Solana) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, openWorldHint), so the bar is lower, yet the description adds a genuinely useful behavioral fact not present in the annotations: 'No auth'. It also implies a static supported-list rather than live data. It stops short of saying whether the list varies by chain deployment or is cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the scope constraint, examples folded inline, and no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-param read-only lookup with no output schema, the description is nearly sufficient: purpose, scope, examples, and auth status are all present. Slightly more (e.g. the return shape of the DEX list) would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents chainId with an example value (622112261 for Solana). The description only restates 'for a chain' and adds no format, range, or fallback semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (supported DEXes) scoped by chain, with concrete examples (Raydium, Pumpfun on Solana) that make the domain unambiguous. It does not explicitly distinguish itself from the nearby sibling get_hl_perp_dexes, which lists a similar-but-different DEX set, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is a reference lookup used before creating or configuring a copy trade, but the description never says when to call it, what precedes it, or how it differs from get_hl_perp_dexes. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_gemsARead-only
Get hot new tokens heavily traded by top wallets. No auth. Cached 20s.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint. The description adds two concrete traits the annotations do not carry: no authentication required and a 20-second cache TTL, both directly relevant to how an agent should call and rate-limit this tool. It does not describe the response shape, but that is a minor omission for a read-only discovery endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste, and the core purpose is front-loaded before the operational notes. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, read-only, no-output-schema tool, the description tells the agent what it returns conceptually, that no auth is needed, and that results are cached. The one gap is any hint about the fields or ranking in the response, which an agent might want when deciding between this and its trending peers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to add; the baseline for a zero-param tool is 4. Schema coverage is reported at 100% for an empty property set, so nothing is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get hot new tokens heavily traded by top wallets'), which distinguishes it in spirit from siblings like get_newest_tokens, get_trending_tokens, and get_bigbuys. 'Gems' is jargon, but the description immediately defines it, so an agent can infer the resource without opening the schema. No sibling is named explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'No auth. Cached 20s.' notes imply this is a lightweight discovery/read call, and 'hot new tokens heavily traded by top wallets' suggests a signal-screening use case. But there is no explicit when-to-use versus get_trending_tokens / get_newest_tokens / get_bigbuys, which occupy very similar territory. Usage is inferable but not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_guideBRead-only
Get a copy trading guide for Solana spot or HyperLiquid perp copy trading.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Platform: solana (spot copy) or hyperliquid (perp copy) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe, static nature of the call is covered. The description adds nothing behavioral beyond that — no mention of what the guide contains, whether it is cached/versioned, or how large the payload is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the verb and resource come first and the platform scope follows. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-param guide lookup with annotations covering safety, this is roughly adequate. However, with no output schema and no statement of what the guide covers or returns, an agent cannot anticipate the response shape before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'chain' param has an enum with a per-value description, so the schema carries the load. The description's phrase 'Solana spot or HyperLiquid perp copy trading' restates the enum semantics (spot vs perp) but adds no new format or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a copy trading guide') and scopes it to Solana spot vs HyperLiquid perp copy trading, so an agent knows exactly what comes back. It does not explicitly distinguish itself from adjacent guide-style siblings such as get_trading_guide, get_component_guide, or get_skill_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for this guide rather than the many other copy-trade tools (get_copy_trade_list, create_copy_trade, get_copy_trade_wallets) or the other guide tools. No prerequisites, no exclusions, no alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_listARead-only
List all copy trade configurations for a user. Requires session-key auth.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | AES-encrypted session key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the session-key auth requirement, which is useful and not in the annotations, but says nothing about the shape, size, or pagination of the returned list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, front-loaded with the operation and followed by the one constraint that matters. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only list with full schema coverage and no output schema, the description is minimally sufficient. It nonetheless omits any differentiation from the many sibling copy-trade and HL copy-trade tools, which is the main gap an agent would need filled for confident selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (data, userId, accountRef all documented in the schema, including the note that accountRef supplies secrets so no secret is passed in chat). The description adds no parameter detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (copy trade configurations) scoped to a user, which is clear on its own. However, it does not differentiate from the crowded sibling family (get_copy_trade_wallets, get_copy_trade_gems, get_copy_trade_dexes, get_copy_trade_tx_list, and especially the parallel get_hl_copy_trade_list), so an agent cannot tell which 'copy trade list' this is without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires session-key auth' gives one usage precondition, which is real context. But there is no explicit when-to-use vs the other copy-trade list tools, no exclusions, and no named alternative, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_tx_listBRead-only
List copy trade transaction history with PnL. Requires session-key auth.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | AES-encrypted session key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external reach are covered. The description adds the session-key auth requirement and the fact that PnL is included in results, which is useful context, but says nothing about pagination, ordering, or result limits for what is likely a long transaction history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding, and the core capability ('List copy trade transaction history with PnL') is front-loaded ahead of the auth caveat. It is efficient, though the auth note could have been paired with more useful scoping detail for the same token cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, no-output-schema list tool with 100% schema coverage, the description covers capability and auth prerequisite adequately. It is still thin on what the transaction list contains beyond PnL, how many records come back, and how it differs from the Hyperliquid-flavored sibling of the same name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only 3 parameters, so the schema already explains data, userId and accountRef in detail (including which fields accountRef supplies). The description's mention of session-key auth loosely maps to `data`/`accountRef` but adds no new parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List copy trade transaction history') and adds the payload detail 'with PnL', so the agent knows what it returns. It does not distinguish itself from the sibling variants get_hl_copy_trade_tx_list or get_copy_trade_list, leaving the agent to infer which copy-trade chain/scope applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Requires session-key auth' is a genuine precondition and better than nothing, but there is no explicit when-to-use guidance and no routing against the nearly identical siblings (get_copy_trade_list, get_hl_copy_trade_tx_list). Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_copy_trade_walletsARead-only
Get top 300 wallets ranked by totalPnl for Solana spot copy trade leaderboard. No auth. Cached 2 min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and openWorld, and the description adds real behavioral facts: no auth required, 2-minute cache, and a hard cap of 300 results. It doesn't say whether refresh is possible or what the result ordering/liveness guarantees are past the cache window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all load-bearing, with the identity of the tool front-loaded ahead of the operational caveats (no auth, cache). Nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, no-output-schema read tool this covers what an agent needs to call and interpret it: known size cap, cache staleness, and ranking criterion. A hint about what each wallet entry contains would close the last gap, but with no output schema that is the only omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline applies; there is nothing for the description to disambiguate. The description's note that ranking is by totalPnl is the only knob-like semantic and is already implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get), resource (top 300 wallets), ranking criterion (totalPnl), and venue scope (Solana spot copy trade leaderboard). That scope implicitly separates it from get_hl_top_traders and get_top_traders, but it doesn't name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The domain wording ('Solana spot copy trade leaderboard') implies when it's relevant, and 'no auth' removes a prerequisite question. However, there is no explicit statement of when to prefer this over get_top_traders or get_copy_trade_custom_wallets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_currently_liveCRead-only
Currently-livestreaming token launches.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that: no pagination behavior, no result ordering, no freshness semantics for 'currently-live', which is the single most ambiguous term in the definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but this is under-specification rather than conciseness: a single fragment with no verb and no actionable detail. Brevity here removes information an agent needs rather than trimming waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, zero-coverage query tool with no output schema, the description should at minimum clarify what 'live' means, how results are scoped, and how paging works. None of that is present, leaving the agent to guess at invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions page, chain, or limit. The most important parameter, chain, accepts a union of string and number with no explanation, and the description does nothing to compensate for that gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The noun phrase identifies the resource ('currently-livestreaming token launches'), so an agent can infer this returns a set of live token launches. However, it lacks a verb, states no scope, and offers zero differentiation from near-siblings like get_live_status, get_newest_tokens, or get_trending_tokens, which an agent cannot distinguish from this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives. The description gives no hint whether this is preferred over get_live_status or get_newest_tokens for a given need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_all_assetsARead-only
Get all tradeable assets on HyperLiquid with max leverage info. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true (an external network read), and the description adds the genuinely useful 'No auth' detail. It stops there — no mention of whether results are cached, how large the list is, or whether it can fail/rate-limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with zero filler: the resource and its key attribute are front-loaded, and the auth precondition trails as a single token.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read with annotations covering safety and no output schema, the description says what is returned (all tradeable assets, with max leverage) and that no auth is needed. Minor gap: it doesn't clarify perp vs spot coverage or the response shape, which an agent may need to pick among the many HyperLiquid read siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly signals a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all tradeable assets on HyperLiquid') plus the payload detail ('max leverage info'), so the agent knows exactly what comes back. It doesn't differentiate itself from closely related siblings like get_hl_meta_and_asset_ctxs or get_hl_perp_dexes, which also surface perp asset data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'No auth' gives one useful call precondition, but the description never says when to choose this over the sibling asset/meta endpoints, or whether it covers spot vs perp. Usage is only implied by the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_clearinghouse_stateARead-only
Get account state (positions, margin) on a HyperLiquid DEX. No auth. Builder/HIP-3 positions (e.g. xyz:NVDA) live under their own dex — pass dex ("xyz") to see them. The default query does NOT show builder positions; an open builder position will look empty without dex.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | Builder/HIP-3 dex prefix, e.g. "xyz". Omit for the default USDC dex. | |
| userAddress | Yes | EVM wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation readOnlyHint=true already establishes the safe-read profile, and the description adds meaningful context beyond that: no authentication required, and the important trap that builder positions are silently hidden without `dex` — an agent could otherwise misread an empty result as a flat account.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every sentence carries information. The closing two clauses ('does NOT show builder positions' and 'will look empty without dex') restate the same caveat, which is mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what comes back; naming positions and margin covers the essentials for a read tool. It could say more about the shape or scope of the returned state, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns above baseline by explaining the consequence of omitting `dex` (empty-looking result) and giving a concrete example format ('xyz'). That is semantics the schema's terse field description does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get account state (positions, margin) on a HyperLiquid DEX') and scopes it to the HyperLiquid DEX, which helps separate it from generic siblings like get_account_state or get_perp_positions. However, it never names which sibling to prefer when the agent wants spot state or perp positions specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context for the optional `dex` parameter: builder/HIP-3 positions live under their own dex and will appear empty without it. This is real when-to-use guidance, though it stops short of naming alternative tools for related queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_copy_trade_listARead-only
List all HL perp copy trade configurations for a user. Requires session-key auth.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | AES-encrypted session key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one piece of non-annotated context, the session-key auth requirement, which is genuinely useful, but it omits return shape and pagination behavior for a list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core action is front-loaded ahead of the auth precondition. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully documented schema and no output schema, the definition covers purpose and the auth requirement adequately. It stops short of describing pagination or capacity, which for a 'list all' endpoint would have been the last useful addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The phrase 'for a user' loosely gestures at userId, but the description adds no format or syntax detail beyond what the schema already provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list), resource (HL perp copy trade configurations) and scope (for a user). This is clearly distinct from write siblings like create_hl_copy_trade and from get_hl_copy_trade_tx_list. However, it does not explicitly distinguish itself from the near-named sibling get_copy_trade_list, leaving the HL-vs-generic distinction to the agent to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (list a user's HL copy trade configs) and gives a precondition ('Requires session-key auth'), but offers no explicit when-to-use versus alternatives such as get_copy_trade_list or get_hl_copy_trade_tx_list. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_copy_trade_tx_listARead-only
Get HL copy trade fill history. Supports pagination (max 100 per page). Session-key auth. Cached 15s.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | AES-encrypted session key | |
| page | No | Page number | 1 |
| limit | No | Results per page (max 100) | 10 |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real operational context beyond that: session-key auth is required, results are cached for 15s, and page size caps at 100. It omits what happens with a missing/expired session key, but the added traits are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four terse sentences, front-loaded with the core purpose, followed by pagination, auth, and caching facts. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, annotation-covered list tool with a fully documented schema and no output schema, the description supplies the missing operational pieces: auth requirement, cache window, and page cap. The main gap is the absence of routing guidance against the many similar history/list siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 data, page, limit, userId, and accountRef. The description only restates the limit cap ('max 100 per page') and adds no meaning about the encrypted session key or accountRef flow. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get HL copy trade fill history'. An agent can identify it as the HL copy-trade fill-history reader. It does not explicitly distinguish itself from near-neighbors such as get_copy_trade_tx_list, hl_tx_list, or get_hl_trade_history, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no named alternative. The agent gets no signal on when this beats get_hl_trade_history, hl_tx_list, or get_copy_trade_tx_list, which all live in the same sibling set. Only implicit usage is conveyed by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_deposit_tokensBRead-only
Get supported deposit tokens for HyperLiquid. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful trait beyond that – 'No auth' – telling the caller it can be invoked without a session, but says nothing about network scope, caching, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource named first and the auth constraint second. There is no filler and nothing that could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with an output schema absent, the description covers what the tool returns only at a high level ('supported deposit tokens') without indicating the list's fields, whether it is mainnet-scoped, or how it differs from other asset-listing siblings. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The absence of parameters is consistent with the schema, which is empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get supported deposit tokens for HyperLiquid'), which is clear enough to distinguish from siblings on first read. It does not explicitly differentiate itself from near neighbors like get_hl_all_assets or get_hl_spot_state, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and does not name an alternative. An agent must infer on its own whether this or get_hl_all_assets is the right call when it needs asset/token data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_meta_and_asset_ctxsBRead-only
Get market metadata and asset contexts from HyperLiquid. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network scope are covered. The description adds one genuinely non-structured fact — that no authentication is required — but says nothing about freshness, rate limits, or the shape of the returned metadata/contexts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the purpose front-loaded and the auth constraint appended. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool this is minimally viable, and annotations cover the safety profile. However, with no output schema, the description leaves the agent guessing at what 'asset contexts' actually contains (per-asset funding, open interest, oracle prices, etc.), which is a meaningful gap for callers consuming the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics for the description to carry and the baseline of 4 applies. Schema coverage is reported at 100% for an empty properties object, adding nothing to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('market metadata and asset contexts') along with the source ('HyperLiquid'), so the agent knows this is a market-data read. It does not, however, distinguish itself from nearby siblings such as get_hl_all_assets, get_hl_perp_dexes, or get_hl_clearinghouse_state, leaving the boundary unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'No auth' is a useful precondition, but the description never says when to reach for this tool versus the other HyperLiquid market-meta siblings, nor what situation it suits. There is no explicit when-to-use or when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_open_ordersBRead-only
Get all open orders on HyperLiquid for a wallet. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| walletAddress | Yes | Wallet address to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only, external-venue nature is covered. The description contributes one extra behavioral fact, 'No auth required,' which is genuinely useful for an agent deciding whether it can call this directly, but it omits return format or pagination behavior. A 3 is right given annotations carry most of the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, and the core purpose is front-loaded before the auth note. Nothing to trim or reorganize.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query with annotations covering the safety profile and a fully documented parameter, the description is serviceable. However, with no output schema, it says nothing about what an 'open order' record contains or whether results are paginated, which an agent would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema fully documents walletAddress as 'Wallet address to query.' The description's 'for a wallet' merely restates this and adds no format, chain, or validation detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('open orders'), venue ('HyperLiquid') and scope ('for a wallet'), so the agent knows exactly what it retrieves. It does not, however, differentiate itself from similarly named siblings such as get_limit_orders or get_hl_trade_history, leaving the agent to infer which order-listing tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like get_limit_orders, get_hl_trade_history, or the perp-position tools. The only usage signal is the implied 'wallet has open orders' condition, which the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_outcome_volumesARead-only
Get 24h notional volume per outcome side coin from the Hyperliquid WS feed. Pass coins from hl_outcomes sides[].coin, e.g. ["#143150","#143151"]. Returns { coin: volume } for coins that reported; a missing coin means no reading (not zero). Prefer hl_outcomes withVolume=true, which reports coverage per market.
| Name | Required | Description | Default |
|---|---|---|---|
| coins | Yes | Outcome side coins, e.g. ["#143150","#143151"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely non-obvious behavior: data comes from a WS feed, and a missing coin means no reading rather than zero volume — a trap an agent would otherwise fall into.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then parameter sourcing, then return shape and the missing-vs-zero caveat, then the alternative. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by stating the return shape ({ coin: volume }) and the null-reading semantics. For a single-parameter read tool this leaves nothing an agent needs unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already includes the example array, so the schema carries the baseline. The description still adds provenance by telling the agent to source coins from hl_outcomes sides[].coin, which is meaning beyond the schema's type declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 24h notional volume per outcome side coin from the Hyperliquid WS feed. It is clearly distinguishable from the sibling hl_outcomes, which the description itself names as the aggregate alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends preferring hl_outcomes withVolume=true, which reports coverage per market, giving the agent a clear routing rule toward the sibling. It stops short of saying exactly when this narrower tool is the right choice (e.g. after you already hold a coin list).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_perp_dexesBRead-only
Get available perpetual DEX list on HyperLiquid. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description's one contribution is 'No auth,' which genuinely saves the agent an unnecessary login/session step, but it says nothing about rate limits, caching, or whether the list is static or live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, resource identified first, with no filler. The 'No auth' fragment is terse but functional rather than wasted, so it sits just below a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read, the essentials are present. With no output schema, however, the description never indicates what the list contains or its shape (DEX names, objects, ordering), which is the one thing an agent cannot infer from structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter-level meaning is missing because no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get available perpetual DEX list on HyperLiquid.' An agent can distinguish it from neighbours like get_hl_all_assets or get_copy_trade_dexes, though it never names those siblings to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no alternative named. The only context is 'No auth,' which is a property of the call rather than a routing rule for choosing this tool over its many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_spot_stateBRead-only
Get HyperLiquid spot trading state for a wallet. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| walletAddress | Yes | Wallet address to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond the annotations — 'No auth required' — but says nothing about what the returned 'state' contains, whether it is paginated, or how fresh it is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, purpose front-loaded before the auth note. Every clause earns its place and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter the safety bar is low, and annotations plus a fully documented single parameter cover most of the ground. The gap is that with no output schema, the vague term 'state' never tells the agent what data actually comes back (balances, open orders, holdings), which is the main thing it needs to route correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter ('Wallet address to query'), so the schema already carries the parameter's meaning. The description adds no format, chain, or address-type detail beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and qualified resource ('HyperLiquid spot trading state for a wallet'), which is far clearer than a bare name. However, it does not differentiate itself from nearby siblings like get_hl_clearinghouse_state, get_hl_outcome_account, or get_account_state, leaving the agent to guess what 'spot trading state' uniquely returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternatives. The only routing-adjacent statement is 'No auth required', which is a constraint rather than usage direction, so the agent gets no help choosing between this and the many other HyperLiquid state readers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_top_tradersARead-only
Get top HyperLiquid perp traders by volume, trade count, or deposit. No auth. Cached 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort by: 'volume', 'tradeCount', or 'deposit' | volume |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower, and the description still adds two facts not in structured data: no authentication required and a 15-minute cache (meaning results can be stale). It omits how many traders are returned and what fields come back, but the caching disclosure is the operationally important one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: the action and scope come first, then the operational facts (auth, cache). Every clause carries information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-parameter lookup with annotations and no output schema, the description covers selection and invocation adequately. It leaves a meaningful gap on the result shape: it never says how many top traders are returned or what fields each entry has, which matters since there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional parameter with 100% schema description coverage, and the description's enumeration of the three sort values merely restates the schema's own 'volume', 'tradeCount', 'deposit' list. It adds no default behavior or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get top HyperLiquid perp traders') plus the three ranking dimensions, which separates it from get_hl_top_traders_by_pnl (PnL-ranked) by implication. It does not explicitly name the near-duplicate sibling get_top_traders, so an agent must infer the difference from the 'HyperLiquid perp' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sort options imply when to pick this tool (volume/count/deposit ranking) and 'No auth' tells the agent no credentials are needed. However, it never says when NOT to use it or points to get_hl_top_traders_by_pnl / get_top_traders as alternatives for different ranking or venue needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_top_traders_by_pnlARead-only
Get top 30 HyperLiquid perp traders ranked by PnL. Data by day/week/month. No auth. Cached 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld, so the description carries useful extra load: no auth required, a 15-minute cache (important for freshness expectations), and a hard cap of 30 results. The 'data by day/week/month' clause is unexplained behaviorally since no parameter selects the window.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, front-loaded with purpose, then granularity, auth, and caching. Telegraphese but every clause carries information; only the ambiguous 'data by day/week/month' phrase costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with no output schema, the description covers what is returned (top 30 perp traders, ranked by PnL), auth requirements, and cache freshness. The unresolved day/week/month wording is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline would be 4, but the description claims 'Data by day/week/month' without any parameter to choose a period. That raises a question the schema cannot answer and slightly undermines confidence in what a call returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'top 30 HyperLiquid perp traders ranked by PnL'. This clearly separates it from generic siblings like get_top_traders and get_top_tokens, though it never explicitly contrasts with the near-identical get_hl_top_traders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance beyond the implicit 'want top perp traders by PnL'. It does not address the obvious overlap with get_hl_top_traders or get_top_traders, which an agent must disambiguate on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_trade_historyBRead-only
Get trade history on HyperLiquid for a wallet. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| walletAddress | Yes | Wallet address to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful trait beyond annotations ('No auth required'), but says nothing about pagination, time-window limits, or result size for what is presumably a long historical list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and venue; no filler and nothing buried. Every clause carries signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with annotations and no output schema, the description covers the essentials of calling it. However, with no output schema there is a real gap: it never indicates what a 'trade history' record contains or whether results are bounded, which an agent needs to consume the response sensibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema fully documents walletAddress. The description's 'for a wallet' merely echoes that parameter without adding format or chain-specific details, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get), resource (trade history), venue (HyperLiquid) and scope (a wallet). This distinguishes it from the generic sibling get_trade_history, though the relationship between the two is left implicit rather than called out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no routing between this and the near-identical sibling get_trade_history. 'No auth required' is context, not usage direction; the agent must infer that this is the HyperLiquid-specific variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hl_user_statsARead-only
Get detailed trading stats for an HL user: daily PnL, volumes, trade counts, win rates. No auth. Cached 1 hr.
| Name | Required | Description | Default |
|---|---|---|---|
| userAddress | Yes | EVM wallet address (managed wallet, not control wallet) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds value beyond them by disclosing auth requirements ('No auth') and a caching duration ('Cached 1 hr'), useful traits not present in structured fields. Return format is only partially touched on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and the metric list first, operational constraints last. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description sensibly enumerates the returned stats and notes auth and caching, which is most of what an agent needs. Minor gaps remain: no pagination, time-range, or formatting detail for the returned metrics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single userAddress parameter is already fully documented by the schema, including the managed-vs-control wallet distinction. The description's 'for an HL user' adds no syntax or format detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (trading stats for an HL user) and enumerates the returned metrics: daily PnL, volumes, trade counts, win rates. An agent can tell what it delivers, though it never names a sibling (e.g. get_wallet_performance, get_hl_trade_history) it should be preferred over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'No auth. Cached 1 hr.' gives an operational precondition and freshness hint, implying the tool is a cheap, safe read. However, there is no explicit when-to-use or when-not-to-use guidance against the many overlapping stats/performance siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_limit_ordersBRead-only
List active limit orders for a user on a specific chain. Requires session-key auth.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Encrypted session key from buildGdexUserSessionData() | |
| userId | No | Control wallet address | |
| chainId | Yes | Numeric chain ID | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the session-key auth requirement, which is real context, but says nothing about whether filled/cancelled orders are excluded, whether results are paginated, or what the response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the core scope front-loaded before the auth prerequisite, with no filler. It is appropriately sized for a simple read tool, though minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does not state what fields the list returns or how many. Combined with the lack of pagination/filtering notes, the definition is adequate but leaves gaps for a four-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters (data, userId, chainId, accountRef) are documented in the schema itself. The description only gestures at 'a user' and 'a specific chain', adding phrasing but no new semantics such as whether userId or accountRef takes precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List active limit orders') with clear scope ('for a user on a specific chain'). It implicitly separates itself from perp-oriented siblings like get_hl_open_orders, but never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Requires session-key auth' clause gives a usable prerequisite, so an agent knows a session must exist first. There is still no guidance on when to pick this over sibling reads such as get_hl_open_orders or get_hl_open_orders/cancel-order flows, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_statusBRead-only
Livestream status for a single token address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Token mint / contract address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and external-access profile is covered. The description adds no behavioral detail such as freshness, error behavior, authentication needs, or what the status represents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It communicates the tool's scope immediately and is appropriately sized for a one-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, a fully documented schema, and no output schema, the definition is minimally adequate. However, it does not explain what the livestream status contains or how an agent should interpret the result, leaving a meaningful gap for a status-returning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single address parameter is fully documented in the schema as the token mint/contract address. The description adds no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: livestream status for a single token address. This distinguishes it from list-oriented siblings such as get_currently_live, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The single-token scope is implied, but the description does not state when this lookup is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mark_priceBRead-only
Get the current mark price for a HyperLiquid asset. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol, e.g. 'BTC', 'ETH' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds one genuinely useful behavioral fact — no authentication is needed — which the annotations do not encode. It says nothing about rate limits, staleness of the mark price, or behavior for unknown symbols.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose front-loaded and the auth note trailing. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, annotation-covered read with one fully documented parameter and no output schema, the description covers purpose and auth. Minor gaps remain — whether the price is perp vs spot and what happens on an invalid symbol — but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 100% schema description coverage, the schema already documents 'coin' with an example ('BTC', 'ETH'). The description adds no format, casing, or validity constraints beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('current mark price for a HyperLiquid asset'), so an agent knows exactly what it returns. It does not explicitly distinguish itself from the closely related sibling get_all_mid_prices (singular vs bulk), leaving that inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and names no alternatives, even though get_all_mid_prices and get_native_prices sit adjacent and overlap in intent. The only usage-adjacent signal is 'No auth required', which speaks to prerequisites rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_native_pricesBRead-only
Get current native token prices (ETH, SOL, SUI, BNB, ...) keyed by chain.
| Name | Required | Description | Default |
|---|---|---|---|
| chainIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered, and "current" adds a freshness cue. But there is no disclosure of update latency, rate limits, or how chains without a price are handled, so the added behavioral context is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, well matched to a one-parameter lookup tool. It is efficient rather than padded, though it is arguably terse enough to leave needed detail out.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with annotations covering safety, the description is mostly adequate, but with no output schema and zero parameter documentation an agent still lacks chain ID format, default/fan-out behavior, and the shape of the chain-keyed result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single chainIds parameter, so the description must compensate; "keyed by chain" hints that chains drive the result set, but it never states accepted chain ID formats (string vs number) or default behavior when omitted. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("Get current native token prices") and scopes it with examples (ETH, SOL, SUI, BNB) plus "keyed by chain." It does not distinguish itself from price-adjacent siblings like get_all_mid_prices or get_mark_price, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus other price tools, no prerequisites, and no note on what happens if chainIds is omitted. The agent must infer usage entirely from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newest_tokensCRead-only
Get newest tokens across all chains (or a specific chain).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only scoping info, disclosing nothing about pagination behavior, result ordering, result limits, or what 'newest' is measured against. It largely restates the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is tight, though the brevity comes partly from under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations covering result shape, so the description should explain the return set and pagination but does not. For a discovery/list tool with three undocumented query parameters, this leaves the agent guessing at invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Three parameters (page, chain, limit) with 0% schema description coverage, so the description must carry the burden and does not. It never explains what 'page' does, the default/max for 'limit', or whether 'chain' is a name, id, or either despite the string|number type union.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (newest tokens) and states the scope (all chains, or one chain). 'Newest' gives it a distinct identity versus siblings like get_trending_tokens and get_top_tokens. However it never names or contrasts those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no alternatives mentioned, despite many overlapping token-discovery siblings (get_top_tokens, get_trending_tokens, get_bigbuys, get_xstocks). The parenthetical about a specific chain is the only hint about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nof1_analyticsCRead-only
Get NoF1 advanced trader analytics for a wallet.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| walletAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds only a vague scope ('for a wallet') and does not disclose what analytics are returned, data freshness, rate limits, or any other 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. Its brevity is appropriate structurally, though the content is underspecified rather than overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two undocumented parameters, no output schema, and no explanation of what 'NoF1 advanced trader analytics' includes, the definition is too thin for an agent to understand what it will receive or how to interpret the chain argument.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters. The description mentions 'wallet' and thus partially implies walletAddress, but it says nothing about the optional chain parameter or accepted formats. It does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb and resource ('Get ... analytics') and a target ('for a wallet'), but 'NoF1 advanced trader analytics' is not defined and does not clearly distinguish it from sibling tools such as get_wallet_performance, get_hl_user_stats, or get_top_traders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, what prerequisites are needed, or what conditions make it appropriate. The phrase 'for a wallet' gives context but not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ohlcvBRead-only
Get OHLCV candlestick data for a token. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End Unix timestamp | |
| from | No | Start Unix timestamp | |
| chain | Yes | Chain identifier | |
| limit | No | Number of candles | |
| resolution | Yes | Candle resolution | |
| tokenAddress | Yes | Token contract address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a genuine behavioral fact – no authentication is required – but omits pagination, default limit, and how resolution interacts with the from/to range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose before the auth note. Nothing is wasted, though the sparse content borders on under-specification for a six-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry return-shape context; it names 'OHLCV candlestick data' but says nothing about ordering, pagination, or default time ranges. The schema covers parameters, but time-series-specific behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (tokenAddress, chain, resolution, from, to, limit) are already documented in the schema. The description adds no syntax, format, or default-value meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and a distinctive resource (OHLCV candlestick data) scoped to a token. No sibling exposes candlestick data, so the agent can differentiate it, though the description never says so explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is 'No auth,' which is a precondition rather than guidance on when to use this tool versus alternatives like get_token_trades or get_mark_price. No when/when-not conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_perp_positionsBRead-only
Get all open perpetual positions for a wallet on HyperLiquid. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Optional filter to specific asset, e.g. 'BTC' | |
| walletAddress | Yes | Wallet address to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds a genuinely useful operational fact ('No auth required'), which lowers the barrier to calling it. It stops short of saying what an empty result means or whether closed positions are excluded over time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core operation, and every clause carries information the agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema coverage and no output schema, the description is nearly sufficient. A note that the coin filter narrows results would have made it complete, since a reader of the description alone would not know filtering is possible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both walletAddress and the optional coin filter are documented in the schema, including an example ('BTC'). The description adds nothing about them, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('open perpetual positions'), scope ('for a wallet') and venue ('HyperLiquid'). It does not explicitly differentiate from close-adjacent siblings like gdex_positions or get_hl_clearinghouse_state, but the read-only 'open positions for a wallet' framing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as gdex_positions, get_hl_clearinghouse_state, or get_account_state. Usage is only inferable from the wording 'for a wallet'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolioARead-only
Token holdings of the managed GDEX wallet on one chain (/v1/portfolio): exact raw and decimal balances, price, native value and P&L per token. Needs the session (accountRef). Errors instead of returning an empty portfolio when the read fails.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Encrypted session data, instead of sessionPrivateKey + apiKey | |
| chain | Yes | Chain to read (holdings are per chain) | |
| apiKey | No | GDEX API key (with sessionPrivateKey) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address (the GDEX userId), not the managed trading wallet | |
| sessionPrivateKey | No | Session private key from sign-in (with apiKey) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's added detail that it 'errors instead of returning an empty portfolio when the read fails' is genuine extra behavioral context an agent cannot get from the annotations. It also names the session requirement, adding useful operational transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the resource and scope, then return fields, then the session/error note. No filler, though the field enumeration is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description adequately covers what is returned (raw/decimal balances, price, native value, P&L), the session prerequisite, and failure behavior. It stops short of noting pagination or chain-specific caveats, but it is largely complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters including accountRef and chain. The description reaffirms the accountRef/session requirement and per-chain scoping but adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource (token holdings) and scope (managed GDEX wallet, one chain) plus the endpoint /v1/portfolio, and enumerates returned fields. An agent can tell it reads portfolio holdings rather than order history or generic balances, though it never names the sibling tools it is distinct from (e.g., get_wallet_info, get_balances).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Needs the session (accountRef)' and 'one chain' hint at prerequisites, but the description never says when to choose this over the many sibling read tools like get_balances or gdex_positions. No explicit when/when-not guidance or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_retailersCRead-only
List registered retailer integrations / branded onboarding partners.
| Name | Required | Description | Default |
|---|---|---|---|
| retailer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-world behavior are covered. The description adds no further behavioral context such as authentication needs, pagination, or return characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. However, the slash-separated phrasing is slightly vague rather than tightly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with annotations covering safety and open-world behavior, the description is minimally adequate. It omits any explanation of the optional retailer parameter and offers no usage context, leaving clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional 'retailer' parameter with 0% description coverage, and the description does not explain its meaning, format, or filtering behavior. It fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource: 'List registered retailer integrations / branded onboarding partners.' It tells the agent this is a read/list operation over retailer integrations, though it does not differentiate from any sibling tool because none appears directly comparable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or which alternatives to prefer. The agent must infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdk_patternBRead-only
Get TypeScript code patterns for common GDEX SDK operations. Returns working code examples.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | The SDK operation to get code patterns for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, so safety and locality are covered. The description adds one useful behavioral fact beyond that — it returns executable code rather than prose — but says nothing about output shape (snippet vs. full file, imports included, TypeScript version) or whether results are cached/static.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the purpose front-loaded before the return-value note, with no filler. It is efficient, though the second sentence is close to restating the first's implication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations covering return format, the description should carry that burden. It says 'working code examples' but not what those examples contain or how they relate to the sibling guide tools, so an agent knows what it will get only in outline.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'operation' parameter is a fully enumerated 12-value list, so the schema does the heavy lifting. The description adds nothing about the parameter — it does not clarify that the enum value selects which pattern family is returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb and resource: retrieve TypeScript code patterns for GDEX SDK operations, plus the return artifact (working code examples). It is clear on its own, but it never distinguishes itself from doc-shaped siblings such as search_gdex_docs, get_component_guide, or get_skill_file, leaving the agent to guess which reference source to reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no named alternative. In a sibling set containing at least four other documentation/guide tools, the absence of any routing rule is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skill_fileARead-only
Read a file that ships with a GDEX skill (e.g. gdex-token-risk scripts/token_risk.py). Omit path to list the skill's files.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File path relative to the skill directory, e.g. "scripts/hl_anomaly.py" | |
| skill | Yes | Skill name, e.g. "gdex-hl-anomaly" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe-read profile is covered. The description adds one genuine behavioral detail beyond that: omitting path returns a listing rather than file contents. It says nothing about auth requirements, file size limits, or error behavior when a path doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core purpose front-loaded and the optional-parameter behavior immediately after. No filler or restated schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with no output schema, the description covers what the tool returns (file contents, or a file listing when path is omitted). It is nearly complete; the only omission is any note about failure modes for invalid skill names or paths.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: 'path' is optional and omitting it switches the tool into a directory-listing mode. That is a meaningful behavioral meaning layered on top of the schema's simple 'File path relative to the skill directory'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read a file that ships with a GDEX skill', with a concrete example (gdex-token-risk scripts/token_risk.py). An agent can distinguish it from siblings like search_gdex_docs or get_sdk_pattern, though the description never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The conditional 'Omit path to list the skill's files' gives one clear behavioral rule, which is useful usage guidance. However, there is no explicit when-to-use-vs-alternatives guidance (e.g. how this differs from search_gdex_docs or get_component_guide), so the agent must infer the selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_detailsBRead-only
Get detailed token info: price, market cap, liquidity, DEX pools, social links, security info. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain identifier | |
| tokenAddress | Yes | Token contract address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful context beyond annotations by stating 'No auth,' but discloses nothing about rate limits, caching, or failure modes for unknown tokens/chains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the verb and packs the return fields compactly. Efficient, though the field list is a comma run rather than structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so by enumerating the info categories. For a simple two-parameter read tool this is largely complete, missing only error/edge-case behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (tokenAddress, chain) are already documented in the schema. The description adds no format hints (e.g. accepted chain identifiers) beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (token details) and enumerates the returned fields (price, market cap, liquidity, DEX pools, social links, security), which meaningfully separates it from narrow siblings like get_token_image or get_token_trades. It doesn't explicitly name those alternatives, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of the many sibling token tools (get_token_trades, get_token_image, get_top_tokens). The agent must infer applicability from the field list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_imageCRead-only
Get server-rendered token social-card image metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | ||
| tokenAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description's 'server-rendered ... image metadata' subtly clarifies that this returns metadata rather than a raw image, which is useful, but it says nothing about the response shape, whether an image URL is included, or CDN/caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler and the key qualifier ('server-rendered', 'metadata') up front. Nothing wasted, though it is arguably too terse to carry the tool's semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter tool with no output schema and zero schema description coverage, the description leaves both parameter semantics and return content unexplained. Only the annotations carry the operational profile, and the gaps are material.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither parameter is described in the description. The tool requires tokenAddress and chain, yet the description never mentions either, and notably does not clarify the accepted chain identifier format (string or number per the schema).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and a precise resource ('server-rendered token social-card image metadata'), which is distinctive among the get_* token siblings. It does not explicitly contrast itself with any sibling, but the resource is narrow enough to be unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool versus alternatives such as get_token_details or get_token_trades, no prerequisites, and no exclusions. The agent is left to infer usage entirely from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_tradesCRead-only
Recent trades for a specific token.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | Yes | ||
| limit | No | ||
| tokenAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds only that results are 'recent', with no statement about ordering, whether results span all chains or the required one, pagination behavior despite page/limit params, or result volume. With annotations carrying the safety burden, the marginal behavioral contribution here is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is good structurally. However, at this length it reads as under-specification rather than economy — the brevity is not compensating for real gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Incorrect assessment placeholder removed — see revised: For a 4-parameter read-only query with no output schema and 0% schema coverage, the description leaves the agent without the chain requirement, pagination contract, or result shape. It is not sufficient to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does not. It only hints at tokenAddress; the required 'chain' parameter, its accepted string/number union, and the page/limit pagination semantics are entirely undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a recognizable operation (fetch recent trades) scoped to a token, so the core purpose is inferable. But with many siblings in the trade-history space (get_trade_history, get_hl_trade_history, get_hl_tx_list, get_token_details), the one-liner gives no basis for distinguishing this from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative-naming guidance is present. The agent is left to guess how this differs from get_trade_history or get_token_details on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_tokensCRead-only
Get top tokens by volume / market cap.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered, but the description adds nothing beyond that: no pagination behavior, no chain scoping, no indication of how results are ranked or how many are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the resource is front-loaded. It is efficiently sized, though the brevity comes at the cost of the missing detail scored elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three undocumented parameters, no output schema, and a large sibling set of token-listing tools, the description is too thin. An agent cannot tell which ranking is used, whether results are paginated, or how to scope by chain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description names none of the three parameters (page, chain, limit). The 'chain' parameter in particular is never hinted at, so an agent has no guidance that results can be scoped to a specific chain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb and resource ('Get top tokens') and names two possible ranking criteria, but leaves it ambiguous which one actually governs the ordering. It does not distinguish itself from siblings like get_trending_tokens or get_newest_tokens, which an agent would need to choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the closely related siblings (get_trending_tokens, get_newest_tokens, get_token_trades). The agent must infer from the name alone when this list is the right one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_tradersCRead-only
Get top performing trader wallets ranked by P&L, win rate, volume, or trade count.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| limit | No | ||
| period | No | 7d | |
| sortBy | No | pnl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. Beyond that the description adds nothing behavioral: no data source, freshness, pagination, or chain coverage. For a ranking/analytics tool with zero schema documentation, this leaves real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and ranking criteria front-loaded. No wasted words, though it is arguably too terse given the undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 undocumented parameters, no output schema, and no annotations covering return behavior, the description is too thin: it never explains what a 'top trader' record contains, how many are returned, or what chain accepts. An agent can call it, but cannot predict the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It names the sort dimensions (P&L, win rate, volume, trade count) but ignores chain, limit, and period entirely, and adds no format or constraint detail beyond the enum values already visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (top performing trader wallets) plus the ranking dimensions. It is clear what the tool returns, though it never distinguishes itself from close siblings like get_hl_top_traders or get_hl_top_traders_by_pnl, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. which chains are supported), and no routing to alternatives such as get_hl_top_traders or get_wallet_performance. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trade_historyARead-only
Successful spot trades of a GDEX account on one chain, newest first (/v1/user_history, keyed by the control wallet). Page with limit (max 50) and cursor = nextCursor of the previous page.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain identifier | |
| limit | No | Trades per page, 1-50 (default 50) | |
| cursor | No | nextCursor from the previous page | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address (the GDEX userId) | |
| sessionPrivateKey | No | Not needed (history is keyed by the control wallet); present so accountRef can fill walletAddress |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/openWorld, so the bar is low; the description still adds real behavior — results are filtered to successful trades only, ordered newest first, scoped to a single chain, and keyed by the control wallet. It also clarifies that sessionPrivateKey is not required, which is non-obvious. It stops short of describing pagination termination or result fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned before pagination mechanics, and every clause carries information. Minor density from stacked parentheticals (endpoint path, keying note, page parameters) keeps it from being perfectly clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list with no output schema and fully documented parameters, the description covers scope, filtering, ordering, and pagination adequately. It leaves out how pagination ends (e.g., null nextCursor) and what fields each trade contains, which an agent would otherwise have to discover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 chain, limit, cursor, accountRef, walletAddress, and sessionPrivateKey. The description's limit/cursor statements largely restate the schema; its only genuine addition is explaining that history is keyed by the control wallet, which is why the private key is unnecessary. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (spot trades of a GDEX account), plus meaningful qualifiers — 'successful', 'on one chain', 'newest first' — that scope the result precisely. The GDEX/spot framing also implicitly separates it from the Hyperliquid sibling get_hl_trade_history, so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives operational guidance for retrieval (keyed by control wallet, page with limit and cursor) but never states when to choose this over get_hl_trade_history, get_token_trades, or get_portfolio, nor any prerequisites such as needing a connected account first. Usage is implied by the resource, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trader_leverageARead-only
Get the active leverage setting a trader uses for a specific coin on HyperLiquid.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| traderWallet | Yes | Trader wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds only that the leverage setting is 'active' and scoped to a specific coin on HyperLiquid; it does not disclose what happens if the trader has no position or how errors are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no redundant or filler content. It is appropriately sized for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations and a fully described two-parameter schema, the description is largely complete. It could say more about the returned leverage value, but no output schema exists and the core operation is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the two required parameters are already documented. The description reinforces that the query is for a specific coin and trader but adds no syntax, format, or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting a trader's active leverage setting for a specific coin on HyperLiquid. It is clear enough to distinguish from the sibling set_leverage by implication, but it does not explicitly name or contrast with that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only getter phrasing, but the description gives no explicit guidance on when to use this versus set_leverage or other account-state tools, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trading_fundsARead-only
Native balance the managed GDEX wallet can trade with on one chain (/v1/user), plus the managed wallet address per chain family. The value is approximate (backend float). Cross-chain USDC: usdc_get_balances.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Encrypted session data, instead of sessionPrivateKey + apiKey | |
| chain | Yes | Chain identifier | |
| apiKey | No | GDEX API key (with sessionPrivateKey) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address (the GDEX userId), not the managed trading wallet | |
| sessionPrivateKey | No | Session private key from sign-in (with apiKey) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's added value is the disclosure that the balance is approximate because it comes from a backend float, and that the response bundles a wallet address. That is genuine context beyond structured fields; it just doesn't cover auth/session requirements, which the params handle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary return value, followed by the precision caveat and the sibling pointer. The endpoint token '(/v1/user)' is borderline noise but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining returns and does so (balance plus per-family managed wallet address, approximate value). An agent has enough to call and interpret it; only auth/session mechanics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all six parameters including accountRef and walletAddress are already documented. The description reinforces that chain is a single identifier and that the returned address is the managed wallet, not the control wallet, but adds little beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource (native balance tradable by the managed GDEX wallet) and adds a second returned value (managed wallet address per chain family). It is clearly distinguishable from usdc_get_balances, though the boundary with get_balances/get_usdc_balance/get_wallet_info is not addressed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes cross-chain USDC lookups to usdc_get_balances and scopes this tool to a single chain. It stops short of saying when to prefer this over get_balances or get_wallet_info, so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trading_guideBRead-only
Get a complete trading guide for spot, perp, or limit order trading.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Trading type: spot, perp, or limit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds only the word 'complete' and the three trading types, but does not say what the guide contains (steps, code samples, required accounts) or how it is shaped. Marginal value beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler and the resource named upfront. It is efficient, though its brevity comes at the cost of detail rather than being a model of front-loaded information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with full schema coverage this is close to adequate. However, with no output schema, the agent still does not know what a 'guide' returns — markdown text, ordered steps, code — which matters for deciding whether to call it during a trading workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single fully-documented enum parameter, so the schema carries the burden. The description merely repeats 'spot, perp, or limit' without adding guidance on which type to choose or how the guide differs per type. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a complete trading guide') and scopes it to spot, perp, or limit via the enum. It is clearly a documentation/instruction tool, distinct from execution siblings like execute_spot or limit_buy. It does not, however, differentiate itself from other guide-type siblings such as get_component_guide or get_copy_trade_guide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this should be called before trading to learn the flow, and the type enum hints at picking a modality. There is no explicit when-to-use, no prerequisites, and no statement of when a different guide or docs tool is the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trending_tokensBRead-only
Get trending tokens sorted by volume and price change. No auth.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Optional chain filter | |
| limit | No | ||
| period | No | 24h | |
| minVolume | No | Minimum volume in USD | |
| minLiquidity | No | Minimum liquidity in USD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. "No auth" adds genuinely useful context not present in structured fields, but the description says nothing about result size, pagination, or freshness of the trending ranking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. Terse to the point of omitting useful detail, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the agent still lacks return-shape, default ordering direction, and how this differs from sibling token lists. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, with chain, minVolume, and minLiquidity documented but limit and period left bare. The description's mention of sorting by volume and price change loosely relates to period/volume semantics but doesn't explain how period or limit affect output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get trending tokens") plus the ordering criteria (volume, price change). It does not distinguish itself from close siblings like get_top_tokens, get_newest_tokens, or trending_list, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the several other token-listing siblings. "No auth" gives a practical signal but is not a usage condition or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usdc_balanceBRead-only
Get USDC balance on HyperLiquid for a wallet. No auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| walletAddress | Yes | Wallet address to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is mostly covered structurally. The description adds 'No auth required,' which is helpful behavioral context, but it does not discuss return freshness, wallet-not-found behavior, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the key scope and auth constraint front-loaded. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool, the description plus annotations are enough to call it correctly. It would be slightly stronger if it clarified the returned balance format or missing-wallet behavior, since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and walletAddress already has a schema description. The tool description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get USDC balance on HyperLiquid for a wallet. The purpose is clear, but it does not distinguish itself from nearby siblings such as usdc_get_balances, get_balances, or get_hl_spot_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives like usdc_get_balances or get_balances. 'No auth required' is useful context, but it is not usage guidance or an exclusion rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_infoARead-only
Summary of the managed GDEX wallet on one chain: managed address, native balance (approximate, /v1/user), token count and USD total (/v1/portfolio). Needs the session (accountRef); there is no address-only read.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Encrypted session data, instead of sessionPrivateKey + apiKey | |
| chain | Yes | Chain identifier | |
| apiKey | No | GDEX API key (with sessionPrivateKey) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address (the GDEX userId), not the managed trading wallet | |
| sessionPrivateKey | No | Session private key from sign-in (with apiKey) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and openWorldHint, but the description adds substantive behavior: the native balance is approximate, the data is sourced from two distinct endpoints (/v1/user and /v1/portfolio), and a session is mandatory. The one unexplained behavior is why a session is required for a read-only summary, but overall this is well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the returned fields front-loaded, followed by the session requirement and the address-only exclusion. Every clause carries information; nothing is repeated or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 the work of naming the return fields (address, approximate native balance, token count, USD total), which is exactly what an agent needs. It covers the mandatory session requirement and the key limitation; a brief note on staleness or refresh behavior would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description's note that accountRef carries the session and that walletAddress alone cannot be used does add a bit of semantic value, but it doesn't explain the chain parameter or the data/apiKey/sessionPrivateKey alternatives beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names the specific resource — a summary of the managed GDEX wallet on one chain — and enumerates exactly what is returned (managed address, native balance, token count, USD total), which tells an agent what it gets without opening the schema. It does not explicitly differentiate itself from siblings like get_balances, get_portfolio or get_trading_funds, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides one real usage constraint — a session/accountRef is required and there is no address-only read — which is genuinely useful gating information. However, it never says when to prefer this over get_balances, get_portfolio or get_account_state, so the agent must infer the choice among overlapping read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_performanceCRead-only
Get wallet performance / PnL summary across recent periods.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| period | No | ||
| walletAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds some behavioral context with "PnL summary across recent periods," but does not explain authentication needs, period boundaries, rate limits, or what the summary contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity comes at the cost of missing operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three undocumented parameters, no output schema, and no description of what a performance/PnL summary returns. For an analytics query with 0% schema coverage, the description leaves too much for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It vaguely implies a period parameter via "recent periods" and a wallet via "wallet performance," but never explains chain, walletAddress format, or valid period values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: getting wallet performance or PnL summary. It is clear what data class is being retrieved, but it does not distinguish itself from nearby analytics siblings like generate_pnl, get_portfolio, or get_hl_user_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives no explicit guidance on when to use this tool versus alternatives, nor any prerequisites such as whether the wallet must be authenticated or indexed. The phrase "across recent periods" implies a time-scoped query but does not specify when this is the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchlistCRead-only
Fetch the user's watchlist.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| userId | No | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare `readOnlyHint: true` and `openWorldHint: true`, so safety and open-world behavior are covered. The description adds no further behavioral context, such as whether authentication is required, what the watchlist contains, or whether results are paginated. It merely restates the read action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero wasted words. It is concise and easy to parse, though its terseness contributes to gaps covered in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters and no output schema, the description should at least clarify the opaque `data` parameter and the authentication role of `accountRef`. It provides none of that, nor does it describe what the returned watchlist includes. The annotations help with safety, but the description is not complete enough to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, with `data` and `userId` undocumented and only `accountRef` described. The description does not compensate by explaining `data`, `userId`, or how `accountRef` supplies session credentials, apart from the weak implication of "user's" watchlist. It adds almost no parameter meaning beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Fetch" the "watchlist." It is clearly a read operation and is distinguishable from the sibling `change_watchlist` by verb. It does not explicitly mention that it is user-scoped beyond the possessive "user's," but the core 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor any prerequisites such as being connected via `gdex_connect`. It only states what the tool does, leaving all usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_xstocksCRead-only
List tokenised equities (xStocks).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and openness profile is covered. The description adds nothing beyond that: it does not mention pagination behaviour, whether the list is exhaustive, how chain filtering affects results, or any rate/coverage caveats that would matter for an open-world directory listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the key noun front-loaded, which is efficient. But the brevity crosses into under-specification for a tool with filtering and paging behaviour that the reader needs to know about.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so return values are undocumented, and the three request parameters are undocumented in both schema and description. For a list/pagination tool with an openWorld annotation, the definition omits what the agent needs in order to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and none of the three parameters (page, limit, chain) are explained in the description, not even their existence. With three fully undocumented parameters the description should carry the burden and does not, so this is worse than the baseline for fully documented or zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and a specific resource ('tokenised equities (xStocks)'), so the agent knows exactly what is returned. It does not, however, contrast itself with the many other token-listing siblings such as get_trending_tokens, get_top_tokens, or get_zora_tokens, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites, and no pointer to alternatives among the many list-style siblings. An agent must guess whether this is a full directory listing or a filtered one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zora_tokensCRead-only
List Zora-protocol tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| chain | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds nothing beyond that. It does not mention pagination behavior, chain support, result ordering, or what the open-world listing actually returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repetition. Although terse, it is structurally clean and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three undocumented parameters, no output schema, and open-world listing behavior, the description is too incomplete. It omits key operational details like pagination, chain filtering, and expected return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the three parameters ('page', 'chain', 'limit'). An agent receives no guidance on accepted chain formats, pagination semantics, or limit bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('Zora-protocol tokens'), making the basic operation clear. However, it does not distinguish this from sibling token-listing tools such as get_top_tokens, get_newest_tokens, or get_trending_tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites or exclusions. The agent must infer usage entirely from the name and sparse description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_builder_referralCRead-only
Get builder-referral metadata for a wallet.
| Name | Required | Description | Default |
|---|---|---|---|
| userAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that—no auth expectations, rate limits, caching behavior, or what kind of referral metadata is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted words. It is appropriately concise, though the brevity leaves the purpose underspecified rather than over-explained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read this is still thin: there is no output schema, and the description does not clarify what 'builder-referral metadata' contains or what address format userAddress expects. An agent can call it, but cannot confidently predict what it will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one parameter, userAddress, with 0% description coverage. The phrase 'for a wallet' weakly maps this to a wallet address, but the description does not specify format, chain, or validation expectations, so it does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('builder-referral metadata') scoped to a wallet. It is clear what the tool does, but it does not distinguish this from nearby siblings such as hl_ref_info or hl_ref_claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent must infer usage solely from the one-line purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_cancel_outcome_orderADestructive
Cancel a resting HIP-4 outcome order. Structured mode: apiKey, walletAddress (control), sessionPrivateKey, outcomeId, coin (must belong to outcomeId), orderId (numeric Hyperliquid oid from hl_create_outcome_order or hl_outcome_account openOrders). Partial fills before the cancel stay in the position. Pre-built mode: computedData alone.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Side coin "#<assetId>" of the order | |
| apiKey | No | Structured mode: API key | |
| orderId | No | Numeric Hyperliquid oid | |
| outcomeId | No | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| computedData | No | Pre-built mode ONLY: encrypted payload. Must be sent alone (no structured fields). | |
| walletAddress | No | Structured mode: CONTROL wallet address from sign-in (not the managed address) | |
| sessionPrivateKey | No | Structured mode: session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, so safety is partly covered. The description adds real behavioral context beyond annotations: partial fills before the cancel remain in the position, and it enumerates the auth inputs (apiKey, sessionPrivateKey, control walletAddress) required in structured mode. It does not describe the response or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then mode-specific requirements and the partial-fill caveat. Dense but every sentence carries information. Slightly run-on, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, 0-required mutation tool with no output schema, the description covers mode selection, credential requirements, parameter provenance, and post-cancel state. It lacks any note on error conditions or confirmation behavior, which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the baseline is 3, but the description adds meaning the schema lacks: coin 'must belong to outcomeId', orderId's origin and numeric-oid nature, walletAddress as the control wallet, and the mutual exclusivity of computedData vs. structured fields. That is meaningful guidance beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Cancel a resting HIP-4 outcome order.' That is far more precise than the bare name. However, it never contrasts itself with the closely-named sibling hl_close_outcome_order, so an agent must infer that 'cancel' (resting order) differs from 'close' (position).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two invocation modes (structured vs. pre-built with computedData alone) and where orderId comes from (hl_create_outcome_order or hl_outcome_account openOrders), which is genuinely useful routing. But there is no explicit when-to-use-this-vs-alternative guidance, especially against hl_close_outcome_order and the generic cancel/update order tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_close_outcome_orderADestructive
Exit a HIP-4 outcome position by SELLING held side tokens (the backend always sells; it cannot short). Structured mode: apiKey, walletAddress (control), sessionPrivateKey, outcomeId, one of coin/sideIndex/sideLabel, price (limit) or isMarket=true, optional size (whole contracts; omit for a full exit — the backend caps size to what you hold). With managedAddress, partial exits must leave both the sold part and the remainder >= 11 quote. Settled markets have no book: GDEX has no claim endpoint, check the HL spot balance instead. Pre-built mode: computedData alone.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Side coin "#<assetId>" from hl_outcomes sides[].coin. Give exactly one of coin / sideIndex / sideLabel. | |
| size | No | Contracts to sell; omit for the full position | |
| price | No | Limit price (omit for isMarket) | |
| apiKey | No | Structured mode: API key | |
| isMarket | No | ||
| outcomeId | No | ||
| sideIndex | No | Side index in sides[] (sides are NOT always Yes/No; read the labels) | |
| sideLabel | No | Exact side label from sides[].label, e.g. "No" or a team name | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| computedData | No | Pre-built mode ONLY: encrypted payload. Must be sent alone (no structured fields). | |
| walletAddress | No | Structured mode: CONTROL wallet address from sign-in (not the managed address) | |
| managedAddress | No | Managed wallet; enables position-aware partial-exit checks | |
| sessionPrivateKey | No | Structured mode: session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive/openWorld annotations, it discloses important behavior: the backend always sells and cannot short, size is capped to the held position, omitting size exits fully, managedAddress partial exits must leave both parts >= 11 quote, and settled markets have no book. These are material operational constraints not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the action and constraint, then moves into structured-mode and pre-built-mode requirements. Despite covering many constraints for a 13-parameter tool, every clause carries operational meaning and there is no obvious filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 13-parameter tool with no output schema, the description covers mode selection, required field combinations, partial-exit limits, and the settled-market caveat. It leaves some gaps around accountRef-based credential flow and error/return behavior, but annotations and schema cover part of that ground.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 85%, so the baseline is 3, but the description adds useful semantics: size is in whole contracts, omit size for a full exit, the backend caps size, and exactly one of coin/sideIndex/sideLabel is needed. It also groups structured vs pre-built mode parameters. It does not mention every schema field, such as accountRef, so it is strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource: 'Exit a HIP-4 outcome position by SELLING held side tokens.' It also clarifies the critical sell-only constraint, which separates it from opening or shorting. It does not explicitly name sibling alternatives, so it falls just short of the highest clarity tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: use structured mode with the listed fields, or pre-built mode with computedData alone. It also explains the settled-market case ('GDEX has no claim endpoint, check the HL spot balance instead'), which is a useful when-not alternative. It does not explicitly route against hl_create_outcome_order or hl_cancel_outcome_order, so 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_create_outcome_orderADestructive
Place an order on a Hyperliquid HIP-4 outcome market. Structured mode (apiKey, walletAddress=control address, sessionPrivateKey, outcomeId, one of coin/sideIndex/sideLabel, isBuy, size, and price unless isMarket) is validated against the live market first: side must belong to outcomeId, size is whole contracts, price in [0.00001, 0.99999] with max 5 decimals, size×price >= 11 quote (a full-position sell is exempt when managedAddress is given), market must not be expired/settled. isBuy=false sells side tokens you hold. reduceOnly is ignored by the backend. Returns status resting (with orderId) | filled | rejected. Pre-built mode: computedData alone.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Side coin "#<assetId>" from hl_outcomes sides[].coin. Give exactly one of coin / sideIndex / sideLabel. | |
| size | No | Whole contracts, e.g. "30" | |
| isBuy | No | Structured mode: true buys side tokens; false sells held tokens | |
| price | No | Limit price, e.g. "0.42" (omit for isMarket) | |
| apiKey | No | Structured mode: API key | |
| isMarket | No | Take the book at ±5% of top of book | |
| outcomeId | No | Structured mode: outcome market id | |
| sideIndex | No | Side index in sides[] (sides are NOT always Yes/No; read the labels) | |
| sideLabel | No | Exact side label from sides[].label, e.g. "No" or a team name | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| reduceOnly | No | Ignored by the backend | |
| computedData | No | Pre-built mode ONLY: encrypted payload. Must be sent alone (no structured fields). | |
| walletAddress | No | Structured mode: CONTROL wallet address from sign-in (not the managed address) | |
| managedAddress | No | Managed wallet; enables position-aware sell checks | |
| sessionPrivateKey | No | Structured mode: session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructive/openWorld, and the description goes well beyond them: it discloses that orders are validated against the live market (side belongs to outcomeId, whole-contract size, price bounds and decimals, minimum notional, expired/settled rejection), that reduceOnly is ignored by the backend, and that the return status is resting/filled/rejected. That is substantial behavioral context an agent could not get from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and mode split, and every clause carries validation detail. The structured-mode sentence is long and dense with nested constraints, which slightly hurts scannability, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation with no output schema and no required fields declared, it covers mode selection, validation rules, and return statuses. It is only mildly incomplete: it does not spell out the accountRef-vs-explicit-secrets alternative or the prerequisite lookup for sides[], which an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema cannot express: the walletAddress-is-control-address distinction, 'one of coin/sideIndex/sideLabel', 'price unless isMarket', and the full-position sell exemption tied to managedAddress.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource: 'Place an order on a Hyperliquid HIP-4 outcome market.' This clearly separates it from siblings like hl_cancel_outcome_order, hl_close_outcome_order, and limit_buy, which are cancellation/close/CEX-style equivalents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names two operational modes (structured vs pre-built with computedData alone) and explains the structured path. It does not explicitly say when to prefer this over sibling order tools (limit_buy, execute_spot) or what precondition fetches (hl_outcomes sides[]) must precede it, so it is clear but lacks explicit alternatives/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_enable_tradingA
Enable HL trading for a managed wallet (one-time, required before outcome/HIP-3 orders). Pass apiKey, walletAddress (control address), sessionPrivateKey and the SDK builds the payload; a pre-built computedData is also accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| computedData | No | ||
| walletAddress | No | CONTROL wallet address from sign-in | |
| sessionPrivateKey | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so this is a known non-destructive write. The description adds that the call is one-time and that secrets may be supplied either directly or via a connected account (implying no secret in chat), which is useful. It does not describe failure modes, permissions, or what state changes on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence that front-loads the purpose and prerequisite before the parameter guidance. Slightly run-on with the semicolon clause, but every element (one-time, order gating, param list, computedData alternative) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param setup tool with no output schema, the description covers intent and the two input paths but leaves gaps: which params are actually required, what the call returns, and what happens if it is invoked twice or on an unmanaged wallet. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 40% schema coverage, the description carries real weight: it enumerates apiKey, walletAddress (clarified as the control address), sessionPrivateKey, and states that pre-built computedData is an accepted alternative input path. That meaningfully supplements the schema, though it doesn't clarify required-vs-optional among the 5 params (schema lists 0 required).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Enable HL trading') for a specific target ('managed wallet'), and immediately qualifies it as one-time and required before outcome/HIP-3 orders. That scope plus the prerequisite framing lets an agent distinguish it from siblings like execute_spot or gdex_execute_trade.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: one-time setup, required before outcome/HIP-3 orders. It does not name a preferred alternative or exclusion beyond that, but the trigger condition is stated clearly rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_list_user_copy_pnlCRead-only
Per-user realised PnL from HL copy-trading.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| userAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the word "realised", with no disclosure of data freshness, whether PnL is aggregated per copy-trade or across all, or what happens with unknown addresses — for an open-world read against external data this is thin added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the core concept front-loaded, but its brevity comes from omission rather than efficiency — the space saved is not reinvested in the parameter or usage detail an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, paginated, external-data query tool with no output schema, the description should at least sketch the return shape (per-coin? per-copy-trade?), pagination semantics, and address format. None of that is present, so an agent has to guess before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about the three parameters. userAddress is required but its expected format is undocumented, and page/limit (pagination) are entirely unexplained in both schema and description, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Per-user realised PnL from HL copy-trading" names the resource (PnL) and the domain (HL copy-trading), and "realised" mildly differentiates it from hypothetical/unrealised PnL tools. But it is close to a restatement of the tool name and does not clarify the unit, time window, or aggregation level versus siblings like get_hl_user_stats or get_copy_trade_tx_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of the many sibling analytics tools (get_hl_user_stats, get_portfolio, get_wallet_performance, get_hl_copy_trade_list). No prerequisites, no mention of whether the user address must be an HL copy-trade participant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_outcome_accountARead-only
Normalised state of a MANAGED wallet on one HIP-4 outcome market: positions (per side: size, hold, available, avgEntryPrice, markPrice, value, unrealizedPnl), openOrders (resting / partially_filled with orderId, price, size, filledSize), fills, historicalOrders (Hyperliquid status). Use it to reconcile after create/cancel/close. raw=true returns the backend payload.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| outcomeId | Yes | Outcome market id from hl_outcomes | |
| userAddress | Yes | MANAGED wallet address (outcome balances live there) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral detail that raw=true returns the backend payload and that the default is a normalised shape. It says nothing about auth requirements for the managed wallet, error states, or freshness/latency, which keeps it at a solid 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource, then a dense but useful enumeration of the payload sections, then two short directive sentences. The parenthetical field lists are long but earn their place by standing in for the absent output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so thoroughly by naming positions, openOrders, fills, and historicalOrders. Combined with readOnly annotations and mostly-covered params, an agent has enough to call and interpret it; only auth/error specifics for the managed wallet are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: the schema documents outcomeId and userAddress but leaves raw bare. The description compensates by explaining raw=true returns the backend payload, giving the one undocumented parameter concrete meaning. It does not restate the managed-wallet provenance for userAddress beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (normalised state of a MANAGED wallet on one HIP-4 outcome market) and enumerates the returned sections, so an agent knows exactly what comes back. It does not explicitly contrast itself with other read tools like hl_outcomes or get_hl_open_orders, but the wallet-scoped, per-market framing is distinctive enough to separate it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to reconcile after create/cancel/close' gives a clear when-to-use condition tied to the mutation siblings (hl_create_outcome_order, hl_cancel_outcome_order, hl_close_outcome_order). No explicit exclusions or alternative read tools are named, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_outcome_check_collateralARead-only
Check the managed wallet's Hyperliquid SPOT balance of a market's quoteToken (outcome buys draw on spot collateral, not the perp account) against size × price.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Intended contracts | |
| price | No | Intended limit price | |
| quoteToken | No | Market quoteToken from hl_outcomes (default USDC) | |
| managedAddress | Yes | MANAGED wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context: that this checks SPOT collateral (not the perp account) and that outcome buys draw on that spot balance, which explains the tool's role in a workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the operation front-loaded and the rationale parenthetically attached. No wasted filler, though the parenthetical makes it slightly hard to parse on first read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description could ideally say what the check returns (e.g., sufficient/insufficient), which is a small gap. Otherwise it is complete enough: the agent knows what is being compared and which balance is relevant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema. The description adds only a marginal hint that the check compares against size × price, but gives no syntax, defaults, or edge-case guidance beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Check) and resource (managed wallet's Hyperliquid SPOT balance of a market's quoteToken), and explains the semantic framing (collateral for outcome buys). An agent can identify the operation, though it does not name or contrast itself with any sibling like usdc_get_balances or hl_outcome_account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the parenthetical that outcome buys draw on spot collateral rather than the perp account, which hints this is a pre-trade sufficiency check. However, there is no explicit when-to-use, when-not-to-use, or named alternative, so the agent must infer the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_outcomesARead-only
Discover Hyperliquid HIP-4 outcome markets (GDEX has no Polymarket/Kalshi). Returns normalised markets: outcomeId, title, sides[] (label, coin "#", balanceCoin "+", price = current mid), quoteToken (collateral, held in the HL spot balance), state (active | pre_launch | expired | settled), rules (price 0.00001-0.99999 tick 0.00001, whole-contract size, min order notional 11 quote), settlement (no claim via GDEX). withVolume=true adds volume24h {volume, asOf, source, coverage} with a bounded wait. raw=true returns the backend payload unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the raw backend payload instead | |
| limit | No | Markets per page, default 20 | |
| query | No | Case-insensitive text match on title / side labels / params, or an exact outcomeId | |
| state | No | Filter by trading state, e.g. "active" | |
| detail | No | Full market records (rules, params, settlement). Default: compact rows | |
| offset | No | Pagination offset (use nextOffset) | |
| sortBy | No | volume: highest 24h volume first (implies withVolume); expiry: soonest first | |
| withVolume | No | Attach 24h volume (bounded by volumeTimeoutMs, default 2500) | |
| excludeFallback | No | Hide "none of the listed outcomes" legs | |
| volumeTimeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description adds genuinely new behavior: that withVolume performs a bounded wait, that raw returns the backend payload unchanged, that quoteToken collateral sits in the HL spot balance, and that settlement cannot be claimed via GDEX. It stops short of stating rate limits, pagination limits, or auth prerequisites, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then return shape, with no filler sentences. It is a single dense paragraph rather than structured bullets, which marginally hurts scannability for ten parameters, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly shoulders the return-value burden and enumerates fields, states, rules, and settlement semantics, which is what an agent needs for a discovery tool. It leaves minor gaps around auth/preconditions and explicit sibling routing, but is otherwise complete for a read-only listing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90%, so baseline is 3, but the description goes beyond the schema by explaining what the returned fields mean (outcomeId, sides, price = current mid, tick size, min order notional) and by clarifying the effect of withVolume, raw, and detail. The interaction note that sortBy=volume implies withVolume is a useful cross-parameter semantic the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Discover Hyperliquid HIP-4 outcome markets') and immediately differentiates scope by noting GDEX has no Polymarket/Kalshi, which separates it from siblings like hl_outcome_account or hl_create_outcome_order. An agent knows this is the market-discovery call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (browse/filter outcome markets) and the GDEX-vs-competitors note gives context, but there is no explicit when-to-use or when-not-to-use guidance and no named alternative such as get_hl_outcome_volumes for volume-only queries. The agent must infer selection from the parameter list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_ref_claimBDestructive
Submit a claim request for accrued HL referral rewards. Requires pre-built computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| computedData | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and readOnlyHint=false, so the safety profile is covered by structured data. The description adds the prerequisite that computedData must be pre-built, but says nothing about irreversibility of the claim, auth requirements, or failure modes beyond what annotations supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and the precondition second; no filler. It is efficient, though the extreme brevity is part of why other dimensions are thin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with an undocumented single required parameter and no output schema, the definition omits how to obtain computedData, what the claim actually does, and whether it can be undone. An agent has no basis for calling it correctly from this text alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is an untyped string, so the description carries the full burden. 'Pre-built computedData' hints the value is derived elsewhere, but it never explains the format, source, or content of that blob, which is the one thing an agent must get right to call this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Submit a claim request') and resource ('accrued HL referral rewards'), so an agent can tell it apart from siblings like hl_ref_info or hl_builder_referral. It stops short of explicitly contrasting those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states one real precondition ('Requires pre-built computedData'), which is a genuine usage constraint. However, it gives no guidance on when to claim versus checking eligibility via hl_ref_info, nor how or where computedData is produced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_ref_infoBRead-only
Get HyperLiquid referral info (earned, eligibility, code).
| Name | Required | Description | Default |
|---|---|---|---|
| userAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the shape of the returned info (earned, eligibility, code), but says nothing about auth requirements, freshness, or whether data is cached. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with no filler, and the resource is front-loaded. It could be marginally improved but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the field enumeration (earned, eligibility, code) usefully hints at the return payload, but the undocumented parameter and absence of usage context leave gaps for a tool that depends on a user address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter userAddress has 0% schema description coverage, and the description does not compensate by explaining that the referral info is scoped to a user address. The reader must infer the link between the parameter and the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get' plus a well-scoped resource 'HyperLiquid referral info', with the returned fields (earned, eligibility, code) enumerated. It is clearly a read of referral state, distinct in intent from the mutation sibling hl_ref_claim, though the description never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The description does not explain that this should be called before hl_ref_claim, nor does it mention any prerequisites or alternatives. Usage is only inferable from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_swap_collateralBDestructive
Swap collateral between HL clearinghouses/perp DEXes (HIP-3). Pass apiKey, walletAddress, sessionPrivateKey, fromToken, toToken, amount or a pre-built computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| toDex | No | ||
| amount | No | ||
| apiKey | No | ||
| fromDex | No | ||
| toToken | No | ||
| fromToken | No | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| computedData | No | ||
| walletAddress | No | ||
| sessionPrivateKey | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the agent knows this is an irreversible-looking write in an open world. The description adds that credentials (apiKey, walletAddress, sessionPrivateKey) are needed and that a pre-built computedData path exists, which is useful beyond the annotations, but it says nothing about what collateral movement actually occurs, atomicity, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose front-loaded ahead of the input instructions, with no filler. The second sentence is essentially a parameter list, but it is compact and does carry information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation tool with ten parameters and no output schema, the description is too thin: it does not explain the mechanics of the clearinghouse/DEX swap, whether the operation is atomic or reversible, or how fromDex/toDex should be chosen. It also mildly conflicts with the schema's accountRef guidance, which steers users away from passing secrets in chat while the description tells them to pass apiKey and sessionPrivateKey.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 10% (only accountRef is documented), so the description must compensate, and it does name seven of the ten parameters and clarifies the two mutually exclusive input modes (individual fields vs computedData). However fromDex, toDex and accountRef are left unexplained, and it never mentions that no parameters are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (swap) plus resource (collateral) and scope (between HL clearinghouses/perp DEXes, HIP-3), which distinguishes it from sibling flows like perp_deposit and perp_withdraw. It stops short of naming a sibling alternative, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no named alternative among the many deposit/withdraw/bridge siblings. The only directive is about how to supply inputs, which is parameter guidance rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_tx_listCRead-only
Get HL transaction list (fills / orders) for a wallet.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | ||
| page | No | ||
| limit | No | ||
| userAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered structurally. The description adds almost nothing beyond that: it does not state pagination/ordering behavior, default page size, or whether fills and orders are merged or returned separately. For a list tool with four inputs, this leaves the agent under-informed about how results arrive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and no filler. It is efficiently structured, though terseness here contributes to the specification gaps noted elsewhere rather than being purely a virtue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Four undocumented parameters, no output schema, and minimal annotations mean the description carries a large burden and does not meet it. An agent lacks guidance on pagination, dex scoping, and result shape before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only covers the required userAddress implicitly via "for a wallet". The dex, page, and limit parameters — including the pagination semantics that materially affect usage — receive no explanation anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get HL transaction list (fills / orders) for a wallet"), which is more informative than a bare name. However, it does not distinguish itself from close siblings such as get_hl_trade_history, get_hl_open_orders, or get_hl_copy_trade_tx_list, which an agent could easily confuse it with. Purpose is inferable but not sharply scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many alternatives, no prerequisites, and no exclusions. The agent must guess its place among get_hl_trade_history, get_hl_open_orders, and get_trade_history on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_tokenB
Import a user-defined custom token into the platform via managed custody. Requires pre-built encrypted computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Optional chain id hint | |
| computedData | Yes | Encrypted computedData payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the mutation/external-effect safety profile is carried by structured data. The description adds useful context beyond that – 'managed custody' for how the token is held and the need for a pre-built encrypted payload – but says nothing about permissions required, idempotency, or what happens to the token after import.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, with the prerequisite second. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation whose safety profile is covered by annotations, the description conveys the action, custody model, and the key prerequisite. It leaves the post-import result (where the token surfaces, whether re-import is idempotent) implicit, which is a minor gap given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (computedData, chainId) are already documented in the schema. The description adds no format, encoding, or provenance detail for computedData beyond what the schema field text provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (import) and resource (user-defined custom token) plus the mechanism (managed custody), which is enough to distinguish it from read-only token tools like get_token_details or buy_token. It does not, however, reference any sibling that might be confused with it, so it stops short of the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no named alternative. The only precondition mentioned ('Requires pre-built encrypted computedData') is a prerequisite, not usage routing, and it restates the required-parameter fact already visible in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
limit_buyBDestructive
Create a limit buy order — buy a token when price drops to target. Uses ABI-encoded + AES-encrypted computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Native token to spend in raw units (wei/lamports), a positive integer string | |
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address (NOT managed wallet) | |
| chainId | Yes | Numeric chain ID (e.g. 622112261 for Solana) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| lossPercent | No | Stop-loss % below trigger, whole number under 100 (e.g. '25'), '0' to skip | 0 |
| tokenAddress | Yes | Token address to buy | |
| triggerPrice | Yes | USD price at which to trigger the buy (plain decimal) | |
| profitPercent | No | Take-profit % above trigger, whole number (e.g. '50'), '0' to skip | 0 |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnly=false and openWorld=true, so the mutation risk is covered by structured data. The description adds useful context that the order payload is ABI-encoded and AES-encrypted and that execution is conditional on price, but it omits whether funds are reserved, whether auth must be established first, and that the opaque "computedData" fragment is never explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action, with no filler. The closing "ABI-encoded + AES-encrypted computedData" phrase is jargon that doesn't help an agent decide or invoke anything, so it's slightly below fully earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world trading order with 10 parameters and no output schema, the description is minimally adequate: the action and trigger are clear, but the auth path (accountRef supplying the key vs. passing secrets directly), order persistence, and cancellation route are left entirely to the schema and sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all 10 parameters including the accountRef/sessionPrivateKey auth choice and the loss/profit percentage semantics. The description adds nothing beyond that, which is the baseline case when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a limit buy order") and immediately glosses the semantics ("buy a token when price drops to target"), which cleanly separates it from a market buy like buy_token and mirrors limit_sell. It stops short of naming sibling tools explicitly, so it misses the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger condition implies the usage case relative to an immediate buy, but there is no explicit when/when-not guidance, no mention of prerequisites (gdex_connect / accountRef vs. sessionPrivateKey), and no pointer to get_limit_orders or direct_cancel_order for lifecycle management.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
limit_sellBDestructive
Create a limit sell order — sell a token when price reaches target. Auto-classifies as TP or SL.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Token amount in raw units (token decimals), a positive integer string | |
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address | |
| chainId | Yes | Numeric chain ID | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| tokenAddress | Yes | Token address to sell | |
| triggerPrice | Yes | USD price at which to trigger the sell (plain decimal) | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description adds one genuine behavioral detail — the order is auto-classified as TP or SL — but says nothing about credential/auth paths, whether funds are escrowed, or how to cancel the resulting order.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action and trigger front-loaded and zero filler. Nothing is repeated unnecessarily and every clause carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation tool with three competing credential parameters and no output schema, the description is thinner than it should be. It omits what the call returns (order id?), how the TP/SL classification is decided, and what lifecycle follow-up (get_limit_orders / direct_cancel_order) applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 8 parameters, including amount, triggerPrice, and the three credential fields, so the schema carries the load. The description only restates 'sell a token' and 'price reaches target' without adding format or ordering semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a limit sell order") plus the triggering condition ("sell a token when price reaches target"), which is enough to distinguish it from limit_buy. It does not, however, name the market-sell or managed alternatives it competes with, so sibling differentiation is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The description never tells the agent how this differs from sell_token, managed_sell, gdex_execute_trade, or place_perp_order, nor what prerequisites (accountRef vs apiKey vs sessionPrivateKey) must be satisfied before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
managed_purchaseBDestructive
Submit an encrypted managed-custody buy trade via the GDEX backend.
| Name | Required | Description | Default |
|---|---|---|---|
| tip | No | Optional priority fee | |
| chainId | Yes | Chain ID for the trade | |
| slippage | No | Max slippage %. Default: 1 | |
| computedData | Yes | AES-encrypted trade payload with signed data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a destructive, open-world write, so the safety bar is lower. The description adds conceptual context ('encrypted', 'managed-custody', 'via backend') that helps an agent understand it's submitting a pre-signed encrypted payload, but it does not explain what gets consumed/destroyed or auth prerequisites beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tight sentence with the resource and mechanism front-loaded, zero filler. It could be slightly more informative without losing concision, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive write tool with no output schema, the description should explain what happens after submission (e.g., that managed_trade_status tracks the result) and any auth/session preconditions. Neither is present, leaving the agent unsure about follow-up and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all four parameters including computedData and slippage. The description adds no parameter-level meaning beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Submit an encrypted managed-custody buy trade via the GDEX backend' tells the agent this is a buy execution path. However, it does not distinguish this from siblings like managed_sell, buy_token, limit_buy, or execute_spot, so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of the alternative 'managed' tools. The agent is left to guess why it should pick this over limit_buy or execute_spot, or whether managed_trade_status is the follow-up.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
managed_sellBDestructive
Submit an encrypted managed-custody sell trade via the GDEX backend.
| Name | Required | Description | Default |
|---|---|---|---|
| tip | No | Optional priority fee | |
| chainId | Yes | Chain ID for the trade | |
| slippage | No | Max slippage %. Default: 1 | |
| computedData | Yes | AES-encrypted trade payload with signed data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the agent knows this is an irreversible external-facing write. The description adds useful context that the payload is encrypted and submitted through the GDEX backend, but says nothing about what gets destroyed, confirmation requirements, or rate limits beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, but the terseness is partly why usage and prerequisite context are missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, external, payload-driven mutation with no output schema, the description omits how computedData is produced, what response to expect, and how status is checked (managed_trade_status). Annotations carry the safety profile but the operational gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so tip, chainId, slippage and computedData are already documented. The description's only addition is the word 'encrypted', which loosely reinforces computedData; it adds no format or construction detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (submit), resource (managed-custody sell trade), and mechanism (encrypted, via GDEX backend). An agent can distinguish it from a plain sell_token or limit_sell, though the description never names the sibling it is the counterpart of (managed_purchase) to reinforce the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no named alternatives. With siblings like sell_token, limit_sell, managed_purchase and gdex_execute_trade all in scope, the agent is left to infer that this is the managed-custody path and that it needs a pre-built encrypted payload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
managed_sign_inB
Sign in to GDEX managed-custody system using encrypted computedData payload.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | Yes | Chain ID (622112261=Solana, 42161=Arbitrum for HL perps) | |
| computedData | Yes | AES-256-CBC encrypted sign-in payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the operation is not read-only, is open-world, and is non-destructive, so the safety profile is covered. The description adds only that the payload is encrypted, and omits any behavioral context such as what session state is established, whether prior payload construction is required, or how failures are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is tight, though this brevity is partly what leaves the usage and prerequisite gaps unaddressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a sign-in entry point with no output schema, the description should indicate what a successful call yields (e.g., session/auth token) and that build_sign_in_payload likely precedes it; neither is covered. Annotations and the schema carry the rest, so this is adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema documents both computedData (AES-256-CBC encrypted payload) and chainId (with concrete chain values). The description's phrase 'encrypted computedData payload' simply restates the schema wording and adds no format, ordering, or value guidance beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (sign in) and a named target (GDEX managed-custody system), which distinguishes it from generic siblings like auth_login, oauth_login and build_sign_in_payload. However, the description never explicitly contrasts itself with those sibling auth tools, so an agent must infer which sign-in path applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the adjacent auth tools (auth_login, oauth_login, generate_session_keypair, build_sign_in_payload) that a caller would have to choose between. The agent gets no explicit cue for selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
managed_trade_statusBRead-only
Poll the status of a managed-custody trade by requestId.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | Request ID returned from purchase/sell submission |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds only that this is a polling operation, but says nothing about polling cadence, terminal statuses, whether status can be pending, or what happens if the requestId is unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no filler. The key action and identifier are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no description of returned statuses, terminal states, or relationship to the submission/wait tools, an agent cannot fully know how to interpret results or when to stop polling. Given the simple one-parameter read-only nature, annotations cover some context, but important status semantics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema description coverage is 100%, so the schema already documents requestId well. The description mentions 'by requestId' but adds no format, source, or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Poll') and resource ('managed-custody trade') and names the key lookup parameter ('requestId'). It is clear what the tool does, though it does not explicitly distinguish itself from nearby tools such as 'wait_for_trade' or the managed_purchase/managed_sell submission tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by 'Poll the status' and 'by requestId', which suggests calling it after a managed purchase or sell submission. However, it does not state when to use this versus polling alternatives or waiting tools, nor any conditions for stopping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oauth_loginA
Log in or sign up using a Google ID token. Google OIDC only — there is no Apple/GitHub branch. If the wallet has no associated email yet, the backend returns 404 with internal code 108 and the caller must invoke associate_email first (using the same idToken) before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Optional chain id hint for wallet resolution. | |
| idToken | Yes | Google-issued OIDC ID token (JWT). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, open-world, non-destructive), and the description adds a non-obvious failure mode with a specific HTTP status and internal error code plus remediation. That is meaningful behavioral disclosure beyond the annotations, though it says nothing about token lifetime, response payload, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action, then the scope constraint, then the edge case. Every sentence carries distinct, actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter auth tool with no output schema, the description covers the credential type, the provider limitation, and the main recovery path. It leaves the success response shape and token persistence unstated, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in-schema, so the schema already carries the semantics. The description only adds that the same idToken is reused for associate_email; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('log in or sign up') and the credential type (Google ID token), plus an explicit scope limitation ('Google OIDC only — no Apple/GitHub branch'). It doesn't explicitly differentiate itself from the sibling auth_login or managed_sign_in, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete conditional flow: on 404/internal code 108, call associate_email first with the same idToken before retrying. That is real when-to-use guidance. It does not, however, say when to pick this over auth_login or managed_sign_in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_perp_positionBDestructive
Open a perpetual futures position on HyperLiquid with leverage, TP/SL. Supports market and limit orders.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol, e.g. 'BTC', 'ETH', 'SOL' | |
| size | Yes | Position size in contracts | |
| price | Yes | Price in USD | |
| apiKey | No | GDEX API key for AES encryption | |
| isLong | Yes | True for long, false for short | |
| slPrice | No | Stop-loss price in USD, '' to skip | |
| tpPrice | No | Take-profit price in USD, '' to skip | |
| isMarket | No | True for market order, false for limit | |
| leverage | No | Leverage 1-50 (sent top-level; HL defaults to 20x if omitted) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| reduceOnly | No | Reduce-only order | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, and openWorld=true, so the safety profile is covered. The description adds HyperLiquid venue context and market/limit, TP/SL, and leverage support, but does not add auth/session requirements or side-effect details beyond annotations and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted text. Every clause contributes to scope or capability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, a destructive trading action, no output schema, and many sibling tools, the description is somewhat thin on account/session flow and alternative selection. Schema and annotations cover much structured detail, but the description does not fully compensate for the missing usage/output context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mentions leverage, TP/SL, and market/limit orders, but adds no syntax or constraints beyond what the schema already documents for all 13 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (open perpetual futures position) plus venue and order features (HyperLiquid, leverage, TP/SL, market/limit). It does not differentiate itself from sibling order-entry tools such as place_perp_order or execute_cross_perp/execute_isolated_perp, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States what the tool does but gives no explicit when-to-use or when-not-to-use guidance and does not route between alternatives. An agent can infer it opens positions, but must choose between open_perp_position, place_perp_order, execute_cross_perp, and execute_isolated_perp without help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_copy_tradeADestructive
Pause a Solana copy trade (isActive=false) WITHOUT deleting it. Reads the current state first and is a no-op if already paused. While paused the copier mirrors neither buys nor sells; positions it opened stay open and their TP/SL orders stay in place. Errors: PAUSE_STATE_UNVERIFIED (state could not be confirmed, nothing sent), PAUSE_UNSUPPORTED (stored config invalid; explains the alternative), COPY_TRADE_NOT_FOUND.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_copy_trade_list) | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the read-before-write pattern, no-op-if-already-paused semantics, and precisely what survives the pause (open positions and their TP/SL orders stay in place). It also enumerates three error codes with meanings, including PAUSE_STATE_UNVERIFIED meaning nothing was sent. The 'WITHOUT deleting it' framing sits in mild tension with destructiveHint=true, but pausing does mutate stored state, so this is not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the key constraint, then the state behavior, then the error taxonomy in one compact sentence. Four sentences, each carrying distinct decision-relevant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the state outcome, the no-op case, and failure modes well enough to call it safely. It does not say what a successful response returns or whether the pause is idempotent beyond the already-paused case, which is a minor residual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so copyTradeId, accountRef, apiKey, userId and sessionPrivateKey are all documented in the schema itself, including the hint that the ID comes from get_copy_trade_list. The description adds no parameter-level detail (e.g., accountRef vs apiKey/sessionPrivateKey precedence), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Pause a Solana copy trade') and immediately scopes it against the obvious sibling alternative by saying it happens 'WITHOUT deleting it'. The parenthetical (isActive=false) pins the exact state change, so an agent can distinguish it from delete_copy_trade and resume_copy_trade without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: pause rather than delete when positions should be kept, and it explicitly notes the no-op path when already paused, which prevents redundant calls. It does not name the concrete alternatives (resume_copy_trade, delete_copy_trade) by name, so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_hl_copy_tradeADestructive
Pause an HL perp copy trade (isActive=false) WITHOUT deleting it. Reads the current state first and is a no-op if already paused. While paused the copier mirrors neither opens nor closes, so copied positions stay open and will NOT follow the trader's exits; their TP/SL orders stay in place. Errors: PAUSE_STATE_UNVERIFIED (nothing sent), PAUSE_UNSUPPORTED (stored config invalid; explains the alternative), COPY_TRADE_NOT_FOUND.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_hl_copy_trade_list) | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, it discloses the exact resulting state (isActive=false), the no-op-if-already-paused behavior, the read-before-write step, and the critical side effect that copied positions stay open and will NOT follow trader exits with TP/SL left in place. It also enumerates failure modes (PAUSE_STATE_UNVERIFIED, PAUSE_UNSUPPORTED, COPY_TRADE_NOT_FOUND), which is far richer than the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the non-deletion distinction, then layers side effects and error codes. Dense but every clause carries actionable information; only the error-code list is slightly list-like.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, and the description compensates by covering behavior, side effects, idempotency, and named error conditions. For a state-mutation tool, nothing an agent needs to invoke or interpret it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters including copyTradeId. The description adds the correct conceptual state (isActive=false) but no parameter-level detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Pause) and resource (HL perp copy trade), and explicitly contrasts with delete ('WITHOUT deleting it'). This distinguishes it from sibling resume_hl_copy_trade and delete_hl_copy_trade without requiring the agent to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly establishes when to use it ('pause ... WITHOUT deleting'), and notes the idempotent read-first behavior. It does not explicitly name delete_hl_copy_trade as the alternative when a permanent stop is intended, so routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perp_depositCDestructive
Deposit USDC into the HyperLiquid perpetual account from Arbitrum.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | USDC amount to deposit, e.g. '100'. Min 10 USDC. | |
| apiKey | No | GDEX API key for AES encryption | |
| chainId | No | Chain ID (must be 42161 = Arbitrum) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| tokenAddress | Yes | USDC token address on Arbitrum | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, destructive, open-world operation, so the safety profile is covered structurally. The description adds only the source chain (already encoded as chainId default 42161 in the schema) and does not disclose that funds leave the Arbitrum wallet irreversibly, that a session/API-key context is required, or what follows a successful deposit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming verb, asset, destination and source chain, with no redundant restatement of the name. It is efficient, though its terseness is part of why coverage elsewhere is thin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, real-money funding operation with no output schema, one sentence is inadequate: prerequisites (accountRef/session key, trading enabled), the minimum amount, bridge/settlement behavior and failure modes are all absent. The agent knows what it does but not how to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 7 fully documented parameters, so the schema carries the load and baseline 3 applies. The description contributes no parameter detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Deposit), asset (USDC), destination (HyperLiquid perpetual account) and source chain (Arbitrum) are all stated, which cleanly pairs it against the sibling perp_withdraw. It does not, however, explicitly distinguish itself from adjacent funding paths like execute_cross_perp or hl_swap_collateral, so an agent operating near those tools gets no routing cue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. that an accountRef from gdex_connect or a session key is expected), and no mention of the 10 USDC minimum enforced by the schema. The agent must infer all preconditions from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perp_withdrawCDestructive
Withdraw USDC from the HyperLiquid perpetual account.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | USDC amount to withdraw | |
| apiKey | No | GDEX API key for AES encryption | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds no behavioral context beyond that: it doesn't say where the USDC goes (control wallet vs. elsewhere), whether partial withdrawals are allowed, fees, minimums, or irreversibility. For a fund-moving mutation, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient but under-specified rather than padded, so it earns a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, five-parameter financial mutation with no output schema, so the description should carry the auth/session requirements and the destination of withdrawn funds. Instead it only restates the name, leaving the agent to reverse-engineer requirements from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is documented in the schema, including the amount string and the credential fields. The description adds nothing beyond restating USDC and the account, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: withdraw USDC from the HyperLiquid perpetual account. Clear on its own, but it does not distinguish itself from neighboring money-movement tools such as perp_deposit, transfer_native, or usdc_convert_native, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus perp_deposit, transfer_native, or the bridge tools, and no mention of prerequisites (a gdex_connect session, API key, signing). The schema hints at these, but the description itself routes nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_perp_orderADestructive
Place a simple perp order on HyperLiquid without TP/SL. isMarket=true (default) is sent via /hl/create_order as a market order; isMarket=false sends a limit order at price via /hl/place_order, which the backend currently accepts only with reduceOnly=true.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| size | Yes | Position size in contracts | |
| price | Yes | Price in USD ('0' with isMarket=true uses the mark price) | |
| apiKey | No | GDEX API key for AES encryption | |
| isLong | Yes | True for long, false for short | |
| isMarket | No | True for market (via create_order), false for limit | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| reduceOnly | No | ||
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the existing destructiveHint and openWorldHint annotations, the description discloses backend routing details: market orders go via /hl/create_order, while limit orders go via /hl/place_order and are currently accepted only with reduceOnly=true. It still omits authentication/session requirements and any response behavior, but the added backend constraint is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two efficient sentences, front-loading the purpose and then the key branching behavior. Every sentence carries relevant information with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter destructive trading tool, the description covers the critical behavioral nuance and a current backend limitation. The input schema documents most parameters, but no output schema exists and the description does not explain return values or session/auth expectations, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already high at 90%, so the baseline is 3. The description adds useful meaning for isMarket, price, and reduceOnly by explaining the market-vs-limit path and the backend restriction on limit orders.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: placing a HyperLiquid perp order without TP/SL. It adds meaningful scope, but does not explicitly differentiate itself from siblings such as open_perp_position or execute_cross_perp/execute_isolated_perp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the isMarket=true vs isMarket=false branch and the current reduceOnly constraint for limit orders. However, it does not explicitly say when to choose this tool over sibling perp-order or position-management tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_copy_tradeADestructive
Resume a paused Solana copy trade (isActive=true). No-op if already active. Trades made while paused are not replayed.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_copy_trade_list) | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=true, openWorld=true). The description adds genuinely useful behavior beyond that: idempotency ('No-op if already active') and the important fact that 'Trades made while paused are not replayed'. It does not explain that resuming re-enables live fund-spending execution, a minor gap given destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place, with the core action front-loaded. No redundant restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the key state transition, idempotency, and the non-replay rule, while annotations carry the safety profile. It stops short of noting auth/session prerequisites or the fund-spending implication of resuming, but is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (including copyTradeId and accountRef) are already documented in the schema. The description's mention of isActive=true is a state note rather than parameter guidance, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resume a paused Solana copy trade') and includes the resulting state (isActive=true). The 'Solana' qualifier distinguishes it from the sibling resume_hl_copy_trade (Hyperliquid), so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Resume a paused ... trade', but the description never states when to prefer this over pause_copy_trade/update_copy_trade or what prerequisite state is required. No explicit when-not or alternative guidance is given, so this is minimum viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_hl_copy_tradeADestructive
Resume a paused HL perp copy trade (isActive=true). No-op if already active. Fills made while paused are not replayed.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_hl_copy_trade_list) | |
| sessionPrivateKey | No | Session private key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety bar is lower. The description still adds genuine non-obvious behavior: the call is idempotent ('No-op if already active') and missed fills are not replayed — both affect whether an agent should call it. It does not explain why the operation is flagged destructive (resumed copying places live trades), which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its precondition, followed by the two edge-case behaviors. No filler and no repetition of name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter and a fully documented schema, the main gaps an agent faces are state preconditions and side effects, both of which are addressed (no-op, no replay). It omits any mention of the auth/session parameters (accountRef, sessionPrivateKey) needed for a live-money operation and gives no sense of the success response, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the hint that copyTradeId comes from get_hl_copy_trade_list, so the schema already carries parameter meaning. The description adds nothing about parameters beyond the state reference '(isActive=true)', which is a state flag rather than a parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resume a paused HL perp copy trade') with the target state (isActive=true), which distinguishes it from pause_hl_copy_trade, create_hl_copy_trade, and the generic resume_copy_trade. An agent can identify the correct tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a paused HL perp copy trade' establishes the precondition clearly, and 'No-op if already active' tells the agent it is safe to call without checking state first. It stops short of naming the alternative (pause_hl_copy_trade) or saying when to prefer update_hl_copy_trade_settings instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gdex_docsARead-only
Search GDEX documentation and skill files by keyword. Returns matching skill sections.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query — keywords to find across all GDEX skills and documentation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, non-open-world operation. The description adds useful scope and a brief return statement ('Returns matching skill sections'), but does not disclose ranking, result limits, pagination, or whether the search covers all docs or only selected sections.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and scope, and the return behavior follows immediately. There is no filler or redundant explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with complete schema coverage and annotations, the description is minimally adequate. However, it does not help the agent choose between this search tool and the several sibling documentation retrieval tools, which is the main contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single parameter is already documented as a keyword query across GDEX skills and documentation. The description's phrase 'by keyword' mirrors the schema without adding syntax, matching behavior, or formatting details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Search GDEX documentation and skill files by keyword,' and adds the return scope ('matching skill sections'). It is clearly distinct from trading siblings, but it does not explicitly differentiate itself from nearby documentation siblings such as get_skill_file, get_sdk_pattern, or get_api_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'by keyword' and the return of matching sections, but there is no explicit when-to-use guidance or comparison against direct-fetch documentation tools like get_skill_file. An agent can infer this is the search entry point, but the routing decision is left largely unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sell_tokenADestructive
Sell a token for the chain's native token from the managed GDEX wallet (session-signed sell_v2). Amount is a token amount ('100') or a percentage of the held balance ('50%', '100%'), resolved from the managed holdings. Returns a requestId; follow it with wait_for_trade. To receive USDC use usdc_sell.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | No | Not supported: the backend picks the route. Rejected when set. | |
| chain | Yes | Chain identifier | |
| amount | Yes | Amount to sell, e.g. '100' or '50%' | |
| apiKey | No | GDEX API key used to encrypt the signed trade | |
| referrer | No | Not supported by purchase_v2/sell_v2. Rejected when set. | |
| slippage | No | Slippage percent, Solana and Sui only (sent as bps, max 50). Rejected on EVM, where the account's stored slippage applies. Omit to use the stored setting. | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| outputToken | No | Omit, or the chain's native token. Anything else is rejected (use usdc_sell for USDC). | |
| priorityFee | No | Solana priority fee in lamports (integer, max 50000000 = 0.05 SOL). Solana only. | |
| tokenAddress | Yes | Contract address of the token to sell | |
| tokenDecimals | No | Only for an absolute amount of a token missing from the managed holdings | |
| walletAddress | No | Control wallet address (the GDEX userId) | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, readOnly=false, openWorld=true, so the safety profile is covered. The description adds value beyond that: it is session-signed, amounts are resolved against managed holdings, it returns a requestId that must be polled with wait_for_trade. Minor gap: no note on failure modes or whether the sell can partially fill.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then amount semantics, then output/next-step routing. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation tool with no output schema, the description covers the essentials: what it sells into, amount forms, return handle, and the follow-up tool. It leaves auth/session sourcing and rejection cases to the schema, which handles them, so remaining gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3. The description still adds meaning by explaining that amount may be absolute ('100') or a percentage of held balance ('50%') resolved from managed holdings, which is not fully spelled out in the schema's terse pattern text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: sell a token for the chain's native token from the managed GDEX wallet, using session-signed sell_v2. It also explicitly distinguishes itself from the sibling usdc_sell for USDC output, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (usdc_sell) and the condition that selects it ('To receive USDC'), and prescribes the follow-up step ('Returns a requestId; follow it with wait_for_trade'). Provides both when-to-use and what-to-do-next guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_leverageADestructive
Set leverage for a specific asset on HyperLiquid. Known broken: /hl/update_leverage has returned 404 in live tests. Pass leverage on open_perp_position instead (sent with the order).
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol | |
| apiKey | No | GDEX API key for AES encryption | |
| isCross | No | True for cross margin, false for isolated | |
| leverage | Yes | Leverage multiplier (1-50) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the mutation risk profile is known. The description adds a genuinely non-obvious behavioral fact: the underlying /hl/update_leverage endpoint returns 404, which no structured field conveys. It stops short of explaining failure modes or requirements for the working path (e.g. whether leverage must be set before opening).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the actionable redirect is placed immediately after the purpose statement rather than buried. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a broken mutation tool with no output schema, the description covers what an agent most needs: what it nominally does and where to go instead. The remaining gap is that it doesn't say whether calling it is still safe to attempt in any environment or whether it is deprecated entirely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters (coin, leverage, isCross, apiKey, accountRef, sessionPrivateKey, walletAddress) are already documented in the schema. The description only reinforces that `leverage` is the operative value and should instead be attached to the order, which adds marginal meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Set leverage for a specific asset on HyperLiquid'), so an agent knows the operation immediately. It does not contrast with the sizing/margin siblings like execute_cross_perp or execute_isolated_perp, but naming open_perp_position as the substitute covers the key differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the tool is known broken (404 in live tests) and directs the agent to pass `leverage` on open_perp_position instead. This is exactly the when/when-not/alternative guidance the dimension asks for, and it prevents a wasted failing call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_nativeADestructive
Transfer native asset (ETH, SOL, SUI, BNB, ...) via managed custody. Requires pre-built encrypted computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Optional chain id hint | |
| computedData | Yes | Encrypted computedData payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the destructive, on-chain nature is covered. The description adds genuine context beyond that — "via managed custody" and the mandatory pre-built encrypted payload — but it does not say how to obtain computedData, what auth is needed, or whether the transfer is irreversible once submitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core action front-loaded and the precondition following it. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, custodial transfer with no output schema and no annotations beyond the safety hints, the description leaves open how the required computedData is constructed (a build_trade_payload-style sibling exists) and what the chainId hint affects. It is minimally adequate but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (chainId, computedData) are documented in the schema, so the baseline of 3 applies. The description only restates that computedData is required and pre-built; it adds no format, encoding, or chainId semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Transfer native asset") and enumerates example assets (ETH, SOL, SUI, BNB), which clearly distinguishes it from the ERC-20-oriented sibling transfer_token. It never names that sibling explicitly, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisite "Requires pre-built encrypted computedData" is a useful precondition, and "native asset" implicitly scopes usage versus token transfers. However, there is no explicit when-to-use/when-not guidance and no pointer to the alternative (transfer_token) or to how the computedData should be produced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_tokenADestructive
Transfer ERC20 / SPL token via managed custody. Requires pre-built encrypted computedData.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | No | Optional chain id hint | |
| computedData | Yes | Encrypted computedData payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, destructive, open-world operation, so the safety profile is covered. The description adds the meaningful detail that the payload must be pre-built/encrypted and that custody is managed, but says nothing about irreversibility of the transfer, required auth/session state, fees, or failure/retry behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences, zero filler, and the critical prerequisite is placed immediately after the action statement so an agent reads it before invoking.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive transfer tool with no output schema and no annotations gap, the description is minimally adequate. It omits how to construct computedData (a sibling like build_trade_payload likely exists for this) and what the tool returns on success, leaving the agent to guess at the pre-conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters, both already documented in the schema, so the baseline is 3. The description confirms computedData is required but adds no syntax, format, or how-to-obtain-the-payload detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (transfer) plus the resource class (ERC20 / SPL token) and the custody mode (managed custody). It implicitly distinguishes itself from the sibling transfer_native, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one hard prerequisite - 'Requires pre-built encrypted computedData' - which tells the agent this cannot be called standalone. But it offers no when-to-use-vs-alternatives guidance (e.g. versus transfer_native or build_trade_payload) and no exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_booking_statusCRead-only
Check trending-slot booking status (pending payment, active, expired).
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| bookingId | No | ||
| tokenAddress | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds value by disclosing the enumerated status lifecycle (pending payment, active, expired), but says nothing about authorization requirements, what happens if the booking does not exist, or whether results are scoped per chain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the verb front-loaded and the status enumeration as a compact parenthetical. Nothing is wasted, though the tightness borders on under-specification given the undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters at 0% coverage, no required fields, no output schema, and no parameter explanation, an agent cannot reliably construct a call. The description should at minimum state which identifiers to supply and how they combine, but it stops at naming the resource.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters (chain, bookingId, tokenAddress), so the description carries the full burden — and it mentions none of them. It never explains whether bookingId or tokenAddress is the lookup key, what chain accepts, or why all three are optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Check trending-slot booking status') and enumerates the possible states (pending payment, active, expired). It is clear what the tool returns, though it does not differentiate itself from nearby siblings like trending_list, trending_register, or managed_trade_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives, no mention of prerequisites (e.g., that a booking must have been created via trending_register), and no indication of which identifiers are needed. The agent must infer the entire usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_listCRead-only
List currently promoted / booked trending tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already establish that this is a safe read operation over external data. The description adds the temporal scope 'currently promoted / booked', but it does not disclose pagination, result shape, rate limits, or how the listing is ordered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted text. However, it is arguably too sparse given the undocumented parameters, and the slash phrasing 'promoted / booked' adds slight ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema and no schema descriptions, the description is incomplete. It says what is listed but not how chain or limit affect the result, nor what the returned list contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has two parameters, chain and limit, with 0% description coverage, so the description needs to compensate. It does not mention either parameter or explain filtering by chain or limiting the number of results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing currently promoted/booked trending tokens. It is clear enough to understand the operation, but it does not explicitly distinguish this from sibling tools such as get_trending_tokens, get_top_tokens, or trending_booking_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The phrase 'currently promoted / booked' implies a context, but it does not route the agent among similar trending-token tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_optionsARead-only
List available trending-slot packages and prices.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-state characteristics are covered. The description adds that the result contains packages and prices, but says nothing about auth requirements, result shape, or whether pricing is live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing tool with annotations, the description is adequate but thin. It does not connect this tool to the likely follow-up flow involving trending_register or trending_booking_status, which an agent would need to sequence calls correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to document. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('trending-slot packages and prices'), so the operation is clear. It does not explicitly distinguish itself from nearby siblings like trending_list or trending_register, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only discovery nature implies it should be called before booking or registering, but the description never says when to use it, when not to, or which sibling to choose instead. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_registerCDestructive
Register / pay for a trending slot.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| slot | No | ||
| chain | Yes | ||
| userId | No | ||
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| computedData | No | ||
| tokenAddress | Yes | ||
| durationHours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, so the safety profile is known. The description adds only that money is involved ('pay'), without stating cost, currency, which chain, irreversibility, or what 'register' mutates. Given the destructive annotation, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no padding, which is appropriately sized. But it is under-specified rather than efficient — the brevity comes at the cost of meaning, and there is no structure to front-load the key constraint (cost).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, payment-involving mutation with no output schema and almost no parameter documentation, the definition is far too sparse. An agent cannot determine cost, credentials, success/failure outcome, or the meaning of most inputs from this description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 13% (just accountRef), and the description explains none of the 8 parameters — slot, chain, tokenAddress, durationHours, data, and computedData are all opaque (e.g., is 'slot' an ID, a name, or a position?). It does not compensate for the coverage gap at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names an action ('register/pay') and a resource ('trending slot'), so the domain is identifiable against siblings like trending_list and trending_options. However, it is vague about what a 'trending slot' actually is and whether the tool registers a slot, pays for one, or both, leaving the core operation ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus trending_options, trending_booking_status, or trending_list, and no prerequisites or ordering (e.g., must a slot be chosen first?). The agent is left to infer everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_copy_tradeADestructive
Low-level Solana copy trade update (prefer update_copy_trade_settings / pause_copy_trade / resume_copy_trade / delete_copy_trade). Every field is rewritten from this payload, so pass the full current config. isDelete=true permanently deletes the configuration; positions it opened are NOT sold and their TP/SL limit orders are NOT cancelled. isChangeStatus=true TOGGLES active/paused relative to the stored state (sending it twice resumes). isDelete and isChangeStatus cannot both be true.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| buyMode | Yes | 1 = fixed SOL amount, 2 = percentage of trader amount | |
| chainId | Yes | Must be 622112261 (Solana) | |
| copySell | No | Also copy sells | |
| gasPrice | No | Priority fee setting (default "0") | |
| isDelete | No | Permanently delete the configuration (positions stay open) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID to modify | |
| lossPercent | Yes | Stop-loss % (> 0, < 100) | |
| traderWallet | Yes | Trader wallet address | |
| copyBuyAmount | Yes | SOL amount (mode 1) or percentage 0-100 (mode 2) | |
| copyTradeName | No | Label | |
| profitPercent | Yes | Take-profit % (> 0) | |
| isChangeStatus | No | Toggle active/paused relative to the stored state | |
| sessionPrivateKey | No | Session private key | |
| excludedDexNumbers | No | DEX numbers to exclude | |
| isBuyExistingToken | No | Buy tokens the trader already holds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description adds genuinely non-obvious behavior: every field is rewritten so the full config must be passed, isDelete leaves positions open and does NOT cancel their TP/SL orders, isChangeStatus is a relative toggle (double-send resumes), and the two flags are mutually exclusive. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the routing guidance and constraints, and every sentence carries weight. The parenthetical sibling list and dense constraint clauses make it somewhat run-on, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation tool with no output schema, the description covers the high-risk behaviors and mutual-exclusion rules thoroughly. Auth/session handling is left to the 100%-covered schema, and return behavior is not described, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline would be 3; but the description adds semantics beyond the schema for the risky parameters (isDelete effect on open positions, isChangeStatus toggle direction, incompatibility of the two flags, full-payload rewrite requirement). It does not, however, clarify the apiKey/userId/accountRef auth interaction that a low-level call requires.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Solana copy trade update') and immediately scopes it as 'low-level' relative to named siblings (update_copy_trade_settings / pause_copy_trade / resume_copy_trade / delete_copy_trade). An agent can distinguish it from those alternatives without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to prefer the higher-level siblings and implicitly reserves this tool for low-level payload rewrites. Both the when-to-use (full config rewrite) and when-not-to-use (use the dedicated settings/pause/resume/delete tools) conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_copy_trade_settingsADestructive
Change settings of an existing Solana copy trade. Never deletes and never pauses/resumes. Reads the current config first; omitted fields keep their current values. Open positions are not resized.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| buyMode | No | 1 = fixed SOL amount, 2 = percentage | |
| copySell | No | Also copy sells | |
| gasPrice | No | Priority fee setting | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_copy_trade_list) | |
| lossPercent | No | Stop-loss % (> 0, < 100) | |
| traderWallet | No | New trader wallet to follow | |
| copyBuyAmount | No | Required when buyMode changes | |
| copyTradeName | No | New label | |
| profitPercent | No | Take-profit % (> 0) | |
| sessionPrivateKey | No | Session private key | |
| excludedDexNumbers | No | DEX numbers to exclude | |
| isBuyExistingToken | No | Buy tokens the trader already holds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the mutation and external-state profile is known. The description adds important behavioral details beyond annotations: it reads the current config first, omitted fields are preserved, and open positions are not resized. 'Never deletes' clarifies that destructiveHint does not imply structural deletion, though auth/session requirements remain implicit in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the main purpose and immediately followed by exclusions and update semantics. No filler, and every sentence adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter mutation tool with no output schema, the description covers the critical behavioral context: partial update, non-deletion, non-pausing, and no position resizing. It does not explain authentication requirements or expected return values, but the schema and annotations carry enough weight that these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds crucial semantics not captured by the schema: omitted fields keep current values, making it clear this is a partial update. It also notes open positions are not resized, which affects how copyBuyAmount and related fields should be interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Change settings of an existing Solana copy trade.' It also explicitly clarifies what the tool does not do ('never deletes and never pauses/resumes'), which distinguishes it from sibling tools like delete_copy_trade and pause_copy_trade without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: use for changing settings, not for deletion or pause/resume. The partial-update rule ('omitted fields keep their current values') further guides invocation. It does not explicitly name the alternative 'update_copy_trade' sibling, but the exclusions are sufficient to route most calls correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_hl_copy_tradeADestructive
Low-level HL perp copy trade update (prefer update_hl_copy_trade_settings / pause_hl_copy_trade / resume_hl_copy_trade / delete_hl_copy_trade). Every field is rewritten from this payload, so pass the full current config. isDelete=true permanently deletes the configuration; perp positions it opened are NOT closed and their TP/SL orders are NOT cancelled. isChangeStatus=true TOGGLES active/paused relative to the stored state. isDelete and isChangeStatus cannot both be true.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| copyMode | Yes | 1 = fixed USD per order, 2 = proportion | |
| isDelete | No | Permanently delete the configuration (positions stay open) | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID to modify | |
| lossPercent | Yes | Stop-loss % (> 0, < 100) | |
| oppositeCopy | No | Trade opposite to the trader | |
| traderWallet | Yes | Trader wallet address | |
| copyTradeName | Yes | Label | |
| profitPercent | Yes | Take-profit % (> 0) | |
| isChangeStatus | No | Toggle active/paused relative to the stored state | |
| sessionPrivateKey | No | Session private key | |
| fixedAmountCostPerOrder | Yes | USD amount (mode 1) or ratio (mode 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, and the description goes well beyond that: it explains that the payload wholly rewrites every field, that isDelete leaves opened positions and their TP/SL orders intact, that isChangeStatus toggles relative to stored state, and that the two flags are mutually exclusive. This is substantial added context for a destructive mutation, though it does not describe the response or confirmation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the routing advice (prefer the specialized siblings), then layers the dangerous edge cases in short declarative clauses. No filler; every sentence conveys an operational constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter destructive mutation with no output schema, it covers the highest-risk behaviors (deletion side effects, toggle semantics, flag conflict, full-payload rewrite) thoroughly. It omits auth/permission prerequisites and return-value expectations, which we'd want but which are partially implied by accountRef/apiKey in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3; the description earns extra by stating the mutual-exclusivity constraint between isDelete and isChangeStatus and the full-rewrite requirement, neither of which is expressed in the schema. The rest of the flag semantics largely repeat the schema's own parameter descriptions, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Low-level HL perp copy trade update') and immediately qualifies it as low-level, distinguishing it from the specialized siblings. An agent can tell it apart from update_hl_copy_trade_settings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names four preferred alternatives (update_hl_copy_trade_settings / pause / resume / delete) in the opening sentence, making this the fallback when those don't apply. It also states the precondition that the full current config must be passed, which shapes correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_hl_copy_trade_settingsADestructive
Change settings of an existing HL perp copy trade. Never deletes and never pauses/resumes. Reads the current config first; omitted fields keep their current values. Configs created by SDK <= 4.12 may hold an invalid copyMode (e.g. 416/480) and oppositeCopy=true; pass copyMode, fixedAmountCostPerOrder and oppositeCopy explicitly to repair them.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | API key | |
| userId | No | Control wallet address | |
| copyMode | No | 1 = fixed USD per order, 2 = proportion | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| copyTradeId | Yes | Copy trade ID (from get_hl_copy_trade_list) | |
| lossPercent | No | Stop-loss % (> 0, < 100) | |
| oppositeCopy | No | Trade opposite to the trader | |
| traderWallet | No | New trader wallet to follow | |
| copyTradeName | No | New label | |
| profitPercent | No | Take-profit % (> 0) | |
| sessionPrivateKey | No | Session private key | |
| fixedAmountCostPerOrder | No | USD amount (mode 1) or ratio (mode 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond annotations: it reads current config first, preserves omitted fields, and does not delete or pause/resume. The SDK repair note is valuable context for a mutation tool, though it does not cover authorization needs or whether changes affect live positions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then exclusions, merge behavior, and repair guidance in four tight sentences. Every sentence adds operational value without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, mutation annotations, and no output schema, the description covers the most important operational behavior, exclusions, and legacy repair case. It leaves minor gaps around auth/accountRef expectations and the exact result shape, but remains sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns extra credit by explaining merge semantics for omitted fields and by naming copyMode, fixedAmountCostPerOrder, and oppositeCopy as the explicit repair trio for invalid legacy configs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Change settings of an existing HL perp copy trade." It also distinguishes this from delete/pause/resume operations by explicitly saying it never performs those actions, so an agent can separate it from key siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly indicates this is a settings-change operation and explicitly excludes delete and pause/resume use cases. It also gives a concrete repair scenario, though it does not explicitly route pause/resume/delete callers to the named sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_orderADestructive
Update or delete an existing limit order. Set isDelete=true to cancel (no other fields needed). An update replaces amount, triggerPrice and TP/SL together, so all four are required.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | New amount in raw units (required unless isDelete) | |
| apiKey | No | API key for AES encryption | |
| userId | No | Control wallet address | |
| chainId | Yes | Numeric chain ID | |
| orderId | Yes | 64-char hex order ID from get_limit_orders | |
| isDelete | No | Set true to cancel the order | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| lossPercent | No | New SL %, whole number under 100, '0' = none (required unless isDelete) | |
| triggerPrice | No | New trigger price in USD (required unless isDelete) | |
| profitPercent | No | New TP %, whole number, '0' = none; buy orders only, sell orders ignore it (required unless isDelete) | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true. The description adds genuinely non-obvious behavior beyond that: an update atomically replaces amount, triggerPrice and both TP/SL values rather than patching individual fields, and the delete path needs no payload. It doesn't address reversibility or confirmation requirements, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the cancel branch, then the update requirement. No filler and no repetition of schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 11-parameter mutation with no output schema, it covers both modes and the coupling of update fields. It leaves the credential path (accountRef vs apiKey vs sessionPrivateKey vs userId) to the schema and says nothing about what a successful update returns, but those are secondary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a cross-field rule the schema only states per-parameter: the four update fields must travel together, and isDelete short-circuits them. That is real value above the per-property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update or delete an existing limit order'), which separates it from creation siblings limit_buy/limit_sell. It does not explicitly name or contrast with direct_cancel_order, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: isDelete=true cancels with no other fields, while an update requires all four of amount, triggerPrice and TP/SL. No explicit 'when not to use' or alternate-tool routing, but the mode selection is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_buyADestructive
Buy a token paying with USDC. Automatic funding is on by default: GDEX bridges USDC and tops up gas from the user's other chains when this chain is short, capped by the signed maxSourceSpendRaw. A pending result returns a requestId: follow it with usdc_wait_for_trade.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| autoBridge | No | Automatic funding (default true, as on gdex.pro): bridge USDC and top up native gas from the user's other chains, within maxSourceSpendRaw | |
| tokenAddress | Yes | Token to buy | |
| usdcAmountRaw | Yes | USDC to spend (6 decimals; 18 on BSC), raw integer units | |
| walletAddress | No | Control wallet address | |
| minTokenOutRaw | Yes | Minimum token out (from usdc_get_trade_quote minus slippage), raw integer units | |
| maxSourceSpendRaw | No | Signed cap on total source spend for auto-funding (default ceil(amount x 1.2)), raw integer units | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, and the description adds genuinely new behavior: default cross-chain bridging/top-up from the user's other chains, a spend cap via maxSourceSpendRaw, and the pending/requestId asynchronous outcome. It does not say what gets destroyed or what the success (non-pending) response contains, which for a destructive swap tool is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: action first, then the default funding behavior and its cap, then the pending-result follow-up. Each sentence carries distinct information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter destructive tool with no output schema, the description covers the two things an agent could not learn elsewhere: cross-chain funding side effects and the pending/requestId flow. It leaves the immediate-success return shape unstated, but the async path — the one that requires agent action — is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all 10 parameters including decimals, defaults, and the minTokenOutRaw derivation. The description only re-emphasizes autoBridge's default and the maxSourceSpendRaw cap, adding little beyond what the schema states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ("Buy a token") plus the payment asset (USDC), which implicitly separates it from usdc_buy_with_native and generic buy_token. It never names a sibling explicitly, so an agent must infer the distinction from the payment-currency phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: automatic funding is on by default, and a pending result must be followed with usdc_wait_for_trade — an explicit next-step routing to a sibling. It lacks any 'when not to use this' guidance (e.g. versus usdc_buy_with_native or gdex_execute_trade) and states no prerequisite such as obtaining a quote first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_buy_with_nativeBDestructive
Buy a token paying with the chain's native token (ETH, BNB, SOL...). Auto-bridge from other chains is on by default, as on gdex.pro.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| autoBridge | No | Automatic funding (default true, as on gdex.pro): bridge USDC and top up native gas from the user's other chains, within maxSourceSpendRaw | |
| tokenAddress | Yes | Token to buy | |
| walletAddress | No | Control wallet address | |
| minTokenOutRaw | Yes | Minimum token out, raw integer units | |
| nativeAmountRaw | Yes | Native amount to spend (18 decimals EVM, 9 Solana), raw integer units | |
| maxSourceSpendRaw | No | Signed cap on total source spend for auto-funding (default ceil(amount x 1.2)), raw integer units | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the agent knows this is an irreversible spend. The description adds that auto-bridge is on by default and that behavior mirrors gdex.pro, which is useful context beyond the annotations, but says nothing about slippage protection, bridge failure, or how to disable auto-bridge beyond what the schema's autoBridge/maxSourceSpendRaw fields already state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and payment asset. 'as on gdex.pro' is a mildly external reference that earns little on its own, but nothing is bloated or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, real-funds destructive trade with no output schema, the description leaves failure modes, slippage/minTokenOut expectations, and the accountRef/gdex_connect prerequisite to the schema. The rich schema and destructive annotation keep it at minimum viable rather than inadequate, but a financial trade tool should do more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every one of the 10 parameters is documented inline, including accountRef's dependency on gdex_connect and the autoBridge cap semantics. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource+payment mode: buying a token funded by the chain's native token, with examples of which natives (ETH, BNB, SOL). It implicitly separates itself from USDC-funded siblings like usdc_buy, but never names those siblings, so an agent must infer the distinction rather than being told it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: pay with native instead of USDC. There is no explicit when-to-use/when-not statement and no mention of the closest alternatives (usdc_buy, buy_token, usdc_convert_native), nor any prerequisite such as connecting via gdex_connect. The auto-bridge default is a behavioral note, not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_convert_nativeADestructive
Convert the chain's native gas token to USDC, keeping a per-chain gas reserve. Get amounts from usdc_get_convert_quote.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| minUsdcOutRaw | Yes | Minimum USDC out, raw integer units | |
| walletAddress | No | Control wallet address | |
| nativeAmountRaw | Yes | Native amount to convert, raw integer units | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating, potentially value-destroying operation. The description adds the useful non-obvious detail that a per-chain gas reserve is retained, but says nothing about irreversibility, the accountRef auth requirement, or slippage given minUsdcOutRaw. With the safety profile covered by annotations, this earns a moderate score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the core action and the gas-reserve behavior are front-loaded, and the quote-tool pointer follows. Nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive conversion tool with no output schema, the annotations carry the safety signal and the schema fully covers the parameters. The description adds the gas-reserve behavior and the quote prerequisite. The only gap is the absence of any mention of irreversibility or auth via accountRef, which is minor given annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters, including chainId constraints and the raw-integer unit convention, are already documented in the schema. The description adds no syntax or unit clarification beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Convert the chain's native gas token to USDC,' plus a distinctive behavior (per-chain gas reserve). An agent can tell what it does, though it does not explicitly contrast itself with the nearby sibling usdc_buy_with_native, which superficially sounds related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Get amounts from usdc_get_convert_quote' is a genuine prerequisite pointer telling the agent which sibling to call first, which is valuable. However, it gives no guidance on when to prefer this over alternatives like usdc_buy_with_native or usdc_buy, so the when-to-use dimension is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_estimate_bridgeARead-only
Quote moving USDC between chains (Relay). amountRaw is what arrives on the destination. The response fromAmountRaw is the source spend to cap usdc_execute_bridge with.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| gasTopUp | No | Destination gas top-up; default on for EVM destinations, off for Solana. Its cost is in the estimate | |
| amountRaw | Yes | USDC to deliver on the destination, raw integer units | |
| toChainId | Yes | Destination chain ID | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| fromChainId | Yes | Source chain ID | |
| walletAddress | No | Control wallet address | |
| gasTopUpAmountUsd | No | Gas top-up in USD, up to 50 (default 1) | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful semantics beyond that: the quote is an estimate (not a state change), amountRaw is the delivered amount, and fromAmountRaw is the source spend cap for execution. It does not discuss quote expiry or rate limits, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero waste; the quote purpose and the destination-amount semantics are front-loaded, and the execution-cap guidance follows naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on explaining return values and does so for the critical field (fromAmountRaw) that chains into execution. It omits other likely quote fields (fees, ETA, rate), but covers what an agent needs to call it and use the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all nine parameters. The description reinforces amountRaw's meaning ('what arrives on the destination') but adds no format, default, or constraint detail beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Quote moving USDC between chains'), names the provider (Relay), and explicitly contrasts itself with the sibling usdc_execute_bridge that consumes its output. An agent can distinguish it from execute_bridge and usdc_execute_bridge without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the workflow role: this produces a quote, and its fromAmountRaw output is what you 'cap usdc_execute_bridge with'. That routes the agent to the right follow-up tool. It stops short of explicitly stating when not to use it, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_execute_bridgeADestructive
Move USDC between chains. maxFromAmountRaw is the signed maximum source spend: use the estimate's fromAmountRaw plus a small headroom. Poll usdc_get_bridge_status with the returned id.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| gasTopUp | No | Destination gas top-up; default on for EVM destinations, off for Solana. Its cost is in the estimate | |
| amountRaw | Yes | USDC to deliver on the destination, raw integer units | |
| toChainId | Yes | Destination chain ID | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| fromChainId | Yes | Source chain ID | |
| walletAddress | No | Control wallet address | |
| maxFromAmountRaw | Yes | Signed maximum source spend, raw integer units | |
| gasTopUpAmountUsd | No | Gas top-up in USD, up to 50 (default 1) | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the IRREVERSIBLE/outward-facing nature is partly covered. The description adds the polling follow-up and the maxFromAmountRaw safety pattern, but does not state irreversibility, required auth (accountRef session), or failure/refund behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, purpose front-loaded, then the non-obvious parameter derivation, then the required follow-up call. No filler; every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by noting the response carries an id used for polling. It covers purpose, the tricky parameter, and the workflow handoff; only the auth/precondition path is left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning for maxFromAmountRaw — explaining it is a signed maximum derived from the estimate's fromAmountRaw plus small headroom — which the schema's bare 'Signed maximum source spend' does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Move USDC between chains.' This is clearly an execution/bridge action distinguishable from quote-type siblings in spirit, but it never names the estimate siblings (estimate_bridge, usdc_estimate_bridge) it pairs with, so the boundary is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an operational recipe (use the estimate's fromAmountRaw plus headroom; poll usdc_get_bridge_status), which implies estimate-first usage. However it never explicitly says when to use this versus estimate_bridge/usdc_estimate_bridge or what preconditions (connected account, funded source) must hold.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_balancesBRead-only
Unified USDC wallet: the user's USDC and native gas balance on every supported chain, plus the cross-chain USDC total.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and open-world behavior are covered. The description adds aggregation scope (all supported chains and cross-chain total) but does not disclose auth/session requirements, rate limits, or the precise return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler that front-loads the unified multi-chain scope. It could be slightly clearer with an explicit verb, but it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With readOnly/openWorld annotations, fully documented parameters, and no output schema, the description gives enough about what is returned: USDC, native gas, and cross-chain total. It stops short of specifying data format or handling of zero-balance chains, so it is strong but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are documented in the schema. The description adds no parameter-level meaning beyond that, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (USDC and native gas balances) and scope (every supported chain plus a cross-chain total), making it distinguishable from single-chain balance tools. It lacks an explicit verb and does not name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this over get_usdc_balance, get_balances, or get_portfolio, and no prerequisites or exclusions are stated. The multi-chain scope implies a use case but leaves alternatives to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_bridge_ordersCRead-only
The user's USDC bridge history.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only nature is covered. The description adds no behavioral context beyond restating that this returns history—it does not disclose authentication expectations, rate limits, or what the history includes. With annotations present, it fails to add meaningful value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a four-word fragment, which is under-specified for a tool with four parameters rather than appropriately concise. It is not front-loaded with action or scope information. The brevity reflects missing content, not efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's read-only retrieval role, lack of output schema, and many sibling bridge/order tools, the description is incomplete. It does not explain what bridge orders are returned, how they relate to get_bridge_orders, or when to use it. An agent would need to infer nearly everything from the name and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (apiKey, accountRef, walletAddress, sessionPrivateKey) are documented in the schema itself. The description adds no additional parameter semantics. Baseline score of 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'The user's USDC bridge history' is effectively a noun-phrase restatement of the tool name usdc_get_bridge_orders. It does not state a verb or action and does not distinguish this tool from siblings such as get_bridge_orders or usdc_get_bridge_status. This qualifies as a tautology rather than a clear purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention get_bridge_orders, usdc_get_bridge_status, or any other sibling, nor does it state prerequisites or context for invocation. The description provides none of the usage routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_bridge_statusBRead-only
Status of a USDC bridge by id. refresh=true polls the bridge provider once.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| refresh | No | ||
| bridgeId | Yes | Bridge id from usdc_execute_bridge | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral detail that refresh=true polls the bridge provider once, but does not mention auth requirements, rate limits, or whether refresh introduces latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with no wasted wording, and the core purpose is front-loaded before the refresh behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status lookup with decent schema coverage, the definition is adequate to invoke the tool correctly. However, with no output schema, it does not describe the returned status shape or possible states, leaving a meaningful gap for an agent interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 83%, so the schema already documents most parameters. The description still adds value by clarifying that bridgeId identifies the bridge and that refresh=true triggers a single provider poll, which is more than the bare boolean schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (USDC bridge) and operation (get status by id), making the tool's purpose clear. It does not explicitly distinguish itself from nearby tools such as usdc_get_bridge_orders or usdc_execute_bridge, so it is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool returns and how refresh works, but gives no explicit guidance on when to use it versus alternatives like usdc_get_bridge_orders or usdc_execute_bridge. Usage is only implied by the tool name and the word 'status'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_convert_quoteARead-only
Quote converting the chain's native gas token to USDC, keeping a gas reserve. amount is raw native or "max".
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Raw native amount, or "max" | |
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context by stating that the quote keeps a gas reserve, which is non-obvious and directly affects how an agent should interpret or use the quote.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences with no filler. The core purpose and gas-reserve behavior are front-loaded, and the amount semantics are stated briefly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only quote tool with fully documented parameters and annotations, the description covers the essential purpose and gas-reserve behavior. However, with no output schema, it does not explain what the quote returns or how it should be used before execution, and it lacks guidance on when to choose it over sibling quote or conversion tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters including amount, chainId, accountRef, and session details. The description repeats the amount semantics ('raw native or "max"') but adds little beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it quotes converting the chain's native gas token to USDC. It clearly implies a read-only quote rather than execution, which helps distinguish it from siblings like usdc_convert_native, but it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the word 'Quote' and the reference to a gas reserve. There is no explicit guidance on when to use this instead of usdc_convert_native, usdc_get_trade_quote, or usdc_buy_with_native, and no stated exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_deferred_tradeBRead-only
Status and funding steps of a deferred (auto-bridged) USDC trade, by tradeId.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| tradeId | Yes | Deferred trade id | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that it returns status and funding steps, but it does not explain authentication needs despite schema fields for apiKey, accountRef, and sessionPrivateKey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and contains no wasted words. It is appropriately compact for a status lookup, though the terseness contributes to the missing sibling and return-value context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It identifies the input key and mentions output themes, status and funding steps, but there is no output schema and the description does not explain what those funding steps are or how this differs from related trade-status tools. It is minimally adequate but leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are documented in the schema itself. The description only reinforces that tradeId identifies the deferred trade and adds no meaning beyond the schema for the authentication-related parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: retrieving status and funding steps for a deferred USDC trade by tradeId. It does not explicitly distinguish this from closely named siblings such as usdc_wait_for_trade, usdc_get_pending_trades, or usdc_get_funding_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to use this tool versus alternatives. An agent must infer that this is for checking a known deferred tradeId, but the description never says so 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.
usdc_get_funding_statusARead-only
Status of a USDC trade or its auto-funding (bridge legs, confirmation, failure reason). Poll with the requestId a trade returned. If it returns a retry capability for a stuck sell, use usdc_retry_sell.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| requestId | Yes | requestId returned by a USDC trade | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description still adds useful behavior: this is a polling endpoint, the return can include bridge legs, confirmation state, a failure reason, and a retry capability. No output schema exists, so a bit more return detail would help, but the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded first, then the polling instruction, then the alternative routing. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only polling tool with no output schema, the description covers purpose, how to poll, and the retry escape hatch. It leaves the exact shape of the status payload only loosely described, but between annotations and the listed status components an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 apiKey, requestId, accountRef, walletAddress, and sessionPrivateKey. The description's only param-related statement (requestId comes from a trade) largely restates the schema's own 'requestId returned by a USDC trade', so it adds little beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get status) and resource (a USDC trade or its auto-funding), and enumerates what the status covers: bridge legs, confirmation, failure reason. It names one sibling (usdc_retry_sell), but does not differentiate from the many adjacent USDC polling tools like usdc_wait_for_trade, usdc_get_pending_trades, or usdc_get_bridge_status, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Poll with the requestId a trade returned" gives clear operating context, and the retry branch routes the agent to usdc_retry_sell when a stuck sell surfaces a retry capability. It lacks an explicit when-to-use-this-vs-usdc_wait_for_trade/pending-trades rule, so no exclusion guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_pending_tradesARead-only
Pending USDC trades on a chain. Check before resubmitting any trade whose outcome is unknown; never resubmit while one is pending.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a genuinely non-obvious operational constraint — do not resubmit while a trade is pending — which is the main reason to call it. It does not mention the auth material (apiKey/session key via accountRef) or what the response contains when nothing is pending.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, and the safety rule is stated after the one-line purpose in the right order. Every clause is actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-required-param query with full schema coverage and no output schema, this is close to sufficient: purpose and the safety rule are covered. A brief note on what an empty result means (no pending trades, safe to proceed) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the chainId enumeration and the accountRef indirection, so the schema carries parameter meaning. The description only implies chain scoping ('on a chain') and adds nothing about chainId, accountRef, or why apiKey/sessionPrivateKey are optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: pending USDC trades on a given chain. It is clear what the tool returns, but it does not name or distinguish itself from near-siblings like usdc_get_deferred_trade, usdc_wait_for_trade, or usdc_get_bridge_orders, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('check before resubmitting any trade whose outcome is unknown') and an explicit prohibition ('never resubmit while one is pending'), which is strong decision guidance. It stops short of naming the alternative tool to use when the check should be skipped or when a trade is confirmed pending and needs waiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_get_trade_quoteARead-only
Executable quote for a USDC- or native-paid buy, or a sell to USDC. Returns amountOutRaw; apply slippage to get the minimum out for usdc_buy / usdc_sell.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Default buy | |
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| payAsset | Yes | What the buy is paid with | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| amountInRaw | Yes | Amount in: USDC/native on a buy, token on a sell, raw integer units | |
| tokenAddress | Yes | Token to buy or sell | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the bar is lower. The description adds that the return is amountOutRaw and that slippage must be applied downstream, but says nothing about quote expiry/staleness or whether the apiKey/accountRef parameters are required for a read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with what the tool returns, followed by the one actionable next step. No filler and nothing important buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract; it names amountOutRaw and the slippage step, which is the essential part. It is slightly thin on auth requirements (apiKey, accountRef, sessionPrivateKey) and the full shape of the quote response, but the safety annotation covers the main risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including side, payAsset, chainId and amountInRaw is already documented in the schema; the description only loosely restates payAsset via 'USDC- or native-paid'. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (quote for a USDC/native-paid buy or a sell to USDC) and names the downstream siblings usdc_buy / usdc_sell, so the agent can place it in the trade flow. It does not, however, distinguish itself from the sibling quote tool usdc_get_convert_quote, leaving one routing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'apply slippage to get the minimum out for usdc_buy / usdc_sell' implies this is a pre-trade quote that feeds those tools, but it never says explicitly 'call this before usdc_buy/usdc_sell' or when NOT to use it. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_retry_sellADestructive
Retry a stuck USDC sell in place, reusing its transaction nonce so it cannot execute twice. Use when usdc_wait_for_trade returns needs_retry (or funding status shows retry.available). Token, amount, chain and nonce are read from the backend's retry capability; re-quote the sell for minUsdcOutRaw.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| requestId | Yes | Original sell requestId | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| minUsdcOutRaw | Yes | Minimum USDC out (re-quote with usdc_get_trade_quote side sell), raw integer units | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a destructive, open-world write. The description adds genuinely non-obvious context: the retry is idempotent because the original nonce is reused, and token/amount/chain/nonce are sourced from the backend's retry capability rather than passed in. It does not address permissions/session requirements or what happens to the original pending sell, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and its key guarantee, then the trigger condition. Dense but no filler; the second clause about re-quoting could be slightly clearer but every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive retry operation with no output schema, the description supplies the trigger, the safety guarantee, and the source of the non-parameter inputs. It lacks only failure/edge-case guidance (e.g. what if the nonce was already consumed or the retry window closed).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds real meaning: requestId refers to the original sell request, and minUsdcOutRaw must come from a fresh usdc_get_trade_quote side sell. It also clarifies that the other trade details are not parameters at all but read from backend retry state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (retry a stuck USDC sell) plus a distinguishing mechanism: in-place retry reusing the original transaction nonce so it cannot double-execute. This clearly separates it from usdc_sell and the other USDC siblings rather than restating the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition tied to named siblings: use when usdc_wait_for_trade returns needs_retry, or when usdc_get_funding_status shows retry.available. The agent knows exactly which prior observation selects this tool versus initiating a fresh sell.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_sellBDestructive
Sell a token and receive USDC into the unified USDC wallet. Settles on its own chain (no auto-funding, as on gdex.pro).
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| chainId | Yes | Chain ID: 1, 10, 56, 146, 8453, 42161 or 622112261 (Solana). No USDC on Robinhood 4663 or Fraxtal 252 | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| autoBridge | No | Default false: sells settle on their own chain and never auto-fund, as on gdex.pro | |
| tokenAddress | Yes | Token to sell | |
| minUsdcOutRaw | Yes | Minimum USDC out (from usdc_get_trade_quote minus slippage), raw integer units | |
| walletAddress | No | Control wallet address | |
| tokenAmountRaw | Yes | Token amount to sell, raw integer units | |
| maxSourceSpendRaw | No | Signed cap on total source spend for auto-funding (default ceil(amount x 1.2)), raw integer units | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it non-read-only, destructive, and open-world. The description adds that settlement happens on the token's own chain with no auto-funding, which is useful behavioral context, but it omits failure modes, retry behavior (a sibling usdc_retry_sell exists), and slippage handling. Some value over annotations, not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, with the core action front-loaded. The 'as on gdex.pro' reference is slightly opaque but does not bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 10-parameter mutation with no output schema, the description is thin: it does not cover prerequisites (apiKey/accountRef/session key auth flow), success/failure signaling, or how it relates to usdc_get_trade_quote and usdc_retry_sell. The rich schema carries most of the load, but the description leaves agent-facing gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds no parameter-level detail beyond what the schema already spells out (autoBridge, maxSourceSpendRaw, minUsdcOutRaw all documented there).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sell a token and receive USDC into the unified USDC wallet') plus the settlement scope. However, it never distinguishes itself from close siblings like sell_token, managed_sell, or limit_sell, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'no auto-funding, as on gdex.pro' clause implies a usage context that routes away from auto-funding flows, but it never explicitly says when to pick this over sell_token or managed_sell. No when-not guidance or alternative naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usdc_wait_for_tradeARead-only
Follow a pending USDC trade (requestId from usdc_buy, usdc_buy_with_native or usdc_sell) to its result, like gdex.pro's live progress note: polls every 3s and returns each step as it happened (bridge legs, gas top-up, approve, swap), the outcome and the tx hash. outcome "needs_retry" means a sell broadcast was dropped and can be retried in place with usdc_retry_sell; "pending" after the timeout means still settling: never resubmit.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | GDEX API key for AES encryption | |
| requestId | Yes | requestId returned by the trade | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| timeoutSec | No | Max seconds to wait, default 120 | |
| walletAddress | No | Control wallet address | |
| sessionPrivateKey | No | Session private key from sign-in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description nonetheless adds real behavioral context beyond the annotations: a 3s polling cadence, the enumerated steps returned (bridge legs, gas top-up, approve, swap), the outcome vocabulary, and the resubmission prohibition. With annotations carrying the safety signal, a 4 is defensible, but the polling/timeout interaction details remain implicit, so a middling-to-good score 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool does, then the outcome semantics, then the caution. Dense and largely waste-free; the aside 'like gdex.pro's live progress note' is decorative rather than functional, a minor cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description is the sole source of return-value documentation, and it delivers: step-by-step results, outcome states, and the tx hash. Combined with the retry/pending semantics and the 3s poll interval, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies. The description adds genuine meaning by tying requestId to the specific producing tools, and by implying timeoutSec governs the pending-vs-timeout outcome; the remaining secret/session parameters are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('follow') and resource ('pending USDC trade') and identifies the requestId provenance (usdc_buy, usdc_buy_with_native, usdc_sell), which distinguishes it from the sibling wait_for_trade and the get/poll tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly covers the branch on outcome: 'needs_retry' routes to usdc_retry_sell, and 'pending after the timeout' carries an explicit 'never resubmit' prohibition. When-to-use and when-not-to-use are both spelled out with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vote_sentimentC
Cast a bullish/bearish sentiment vote on a token.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| chain | Yes | ||
| userId | No | ||
| sentiment | Yes | 'bullish' | 'bearish' | |
| accountRef | No | Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat | |
| tokenAddress | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the write nature is known. The description adds no behavioral context beyond that – no auth/permission requirements, no indication whether a vote can be changed or is idempotent, and no rate-limit or side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is clean, though its brevity borders on under-specification for a 6-parameter write tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with 6 parameters, no output schema, and only 33% schema coverage, the description is inadequate. It omits the accountRef/session requirement, what the vote affects, and any outcome, leaving the agent without enough to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%; only the sentiment enum is documented. The description explains nothing about chain, tokenAddress, data, userId, or the accountRef parameter that supplies the session key and credentials. With low coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Cast a bullish/bearish sentiment vote on a token.' An agent can understand the action clearly, but the description offers no differentiation from any sibling (e.g., add_comment could plausibly overlap), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent is left to infer when a sentiment vote is appropriate versus other actions in this large tool family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_tradeARead-only
Follow a buy_token / sell_token requestId to its result by polling /v1/trade-status. outcome: filled, failed, not_found (expired id) or pending (still running at the timeout: never resubmit).
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | requestId returned by buy_token or sell_token | |
| timeoutSec | No | Max seconds to wait, default 120 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, but the description adds meaningful context beyond them: the polling mechanism, the full set of outcome states (filled, failed, not_found, pending), and the safety caveat about pending/expired ids. Polling interval is not stated, but with no output schema the outcome enumeration carries the key behavioral weight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and followed by the outcome states. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param wait tool with no output schema, the description supplies the outcome values an agent would otherwise lack and clarifies the pending/expired edge case. Nothing essential for correct invocation or interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents both requestId and timeoutSec (default 120). The description repeats 'requestId from buy/sell' without adding syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (follow/poll) and resource (a trade request's result via /v1/trade-status), and anchors itself to buy_token/sell_token requestIds. This distinguishes it from unrelated read tools and clarifies it is the polling step of the trade lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the precondition (a requestId from buy_token or sell_token) and a key when-not rule ('never resubmit' on pending). It does not explicitly distinguish from the sibling usdc_wait_for_trade, which is a minor omission.
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.
35 tool updates
v5.1.0- Changed
buy_token13 fields changed- changed
Input schema / properties / amount / descriptionPrevious value: -"Amount of native token to spend, e.g. '0.1' for 0.1 SOL"New value: +"Native token to spend, e.g. '0.1' for 0.1 SOL; converted exactly to native decimals" - changed
Input schema / properties / apiKey / descriptionPrevious value: -"GDEX API key for managed-custody buys (with sessionPrivateKey)."New value: +"GDEX API key used to encrypt the signed trade" - changed
Input schema / properties / chain / descriptionPrevious value: -"Chain: 'solana', 'sui', or ChainId number (1=ETH, 8453=Base, 42161=Arbitrum)"New value: +"Chain: 'solana', 'base', or a chain id (8453=Base, 42161=Arbitrum)" - changed
Input schema / properties / dex / descriptionPrevious value: -"Preferred DEX (raydium, orca, uniswap-v3, cetus, odos, etc.)"New value: +"Not supported: the backend picks the route. Rejected when set." - changed
Input schema / properties / inputToken / descriptionPrevious value: -"Override input token address (default: native)"New value: +"Omit, or the chain's native token. Anything else is rejected (use usdc_buy for USDC)." - changed
Input schema / properties / priorityFee / descriptionPrevious value: -"Solana priority fee in lamports (integer, Solana only)"New value: +"Solana priority fee in lamports (integer, max 50000000 = 0.05 SOL). Solana only." - changed
Input schema / properties / priorityFee / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / referrer / descriptionPrevious value: -"Referral address"New value: +"Not supported by purchase_v2/sell_v2. Rejected when set." - changed
Input schema / properties / sessionPrivateKey / descriptionPrevious value: -"Managed-custody session private key (from sign-in). Required for EVM managed swaps — routes through the session-signed purchase_v2 flow."New value: +"Session private key from sign-in" - removed
Input schema / properties / slippage / defaultRemoved value: -1 - changed
Input schema / properties / slippage / descriptionPrevious value: -"Max slippage tolerance in percent. Default: 1"New value: +"Slippage percent, Solana and Sui only (sent as bps, max 50). Rejected on EVM, where the account's stored slippage applies. Omit to use the stored setting." - changed
Input schema / properties / tokenAddress / descriptionPrevious value: -"Contract address of the token to buy"New value: +"Contract address (mint on Solana) of the token to buy" - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"Wallet address to trade from"New value: +"Control wallet address (the GDEX userId)"
- Added
delete_copy_trade - Added
delete_hl_copy_trade - Added
gdex_execute_trade - Added
gdex_manage_position - Added
gdex_operation - Added
gdex_positions - Added
gdex_preview_trade - Added
gdex_status - Changed
get_balances6 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - added
Input schema / properties / apiKeyAdded value: +{ + "description": "GDEX API key (with sessionPrivateKey)", + "type": "string" +} - added
Input schema / properties / dataAdded value: +{ + "description": "Encrypted session data, instead of sessionPrivateKey + apiKey", + "type": "string" +} - added
Input schema / properties / sessionPrivateKeyAdded value: +{ + "description": "Session private key from sign-in (with apiKey)", + "type": "string" +} - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"Wallet address"New value: +"Control wallet address (the GDEX userId), not the managed trading wallet" - changed
Input schema / requiredPrevious value: -[ - "walletAddress", - "chain" -]New value: +[ + "chain" +]
- Changed
get_hl_outcome_volumes1 field changed- changed
Input schema / properties / coins / descriptionPrevious value: -"Outcome coin names, e.g. [\"#1010\",\"#1011\"]"New value: +"Outcome side coins, e.g. [\"#143150\",\"#143151\"]"
- Changed
get_portfolio7 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - added
Input schema / properties / apiKeyAdded value: +{ + "description": "GDEX API key (with sessionPrivateKey)", + "type": "string" +} - changed
Input schema / properties / chain / descriptionPrevious value: -"Optional chain filter"New value: +"Chain to read (holdings are per chain)" - added
Input schema / properties / dataAdded value: +{ + "description": "Encrypted session data, instead of sessionPrivateKey + apiKey", + "type": "string" +} - added
Input schema / properties / sessionPrivateKeyAdded value: +{ + "description": "Session private key from sign-in (with apiKey)", + "type": "string" +} - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"Wallet address to query"New value: +"Control wallet address (the GDEX userId), not the managed trading wallet" - changed
Input schema / requiredPrevious value: -[ - "walletAddress" -]New value: +[ + "chain" +]
- Added
get_skill_file - Changed
get_trade_history12 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / properties / chain / descriptionPrevious value: -"Optional chain filter"New value: +"Chain identifier" - added
Input schema / properties / cursorAdded value: +{ + "description": "nextCursor from the previous page", + "type": "number" +} - removed
Input schema / properties / endTimeRemoved value: -{ - "description": "End Unix timestamp", - "type": "number" -} - removed
Input schema / properties / limit / defaultRemoved value: -20 - added
Input schema / properties / limit / descriptionAdded value: +"Trades per page, 1-50 (default 50)" - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - removed
Input schema / properties / pageRemoved value: -{ - "default": 1, - "type": "number" -} - added
Input schema / properties / sessionPrivateKeyAdded value: +{ + "description": "Not needed (history is keyed by the control wallet); present so accountRef can fill walletAddress", + "type": "string" +} - removed
Input schema / properties / startTimeRemoved value: -{ - "description": "Start Unix timestamp", - "type": "number" -} - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"Wallet address"New value: +"Control wallet address (the GDEX userId)" - changed
Input schema / requiredPrevious value: -[ - "walletAddress" -]New value: +[ + "chain" +]
- Added
get_trading_funds - Changed
get_wallet_info6 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - added
Input schema / properties / apiKeyAdded value: +{ + "description": "GDEX API key (with sessionPrivateKey)", + "type": "string" +} - added
Input schema / properties / dataAdded value: +{ + "description": "Encrypted session data, instead of sessionPrivateKey + apiKey", + "type": "string" +} - added
Input schema / properties / sessionPrivateKeyAdded value: +{ + "description": "Session private key from sign-in (with apiKey)", + "type": "string" +} - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"Wallet address"New value: +"Control wallet address (the GDEX userId), not the managed trading wallet" - changed
Input schema / requiredPrevious value: -[ - "walletAddress", - "chain" -]New value: +[ + "chain" +]
- Changed
hl_cancel_outcome_order7 fields changed- added
Input schema / properties / apiKey / descriptionAdded value: +"Structured mode: API key" - added
Input schema / properties / coin / descriptionAdded value: +"Side coin \"#<assetId>\" of the order" - added
Input schema / properties / computedData / descriptionAdded value: +"Pre-built mode ONLY: encrypted payload. Must be sent alone (no structured fields)." - removed
Input schema / properties / dexRemoved value: -{ - "type": "string" -} - added
Input schema / properties / orderId / descriptionAdded value: +"Numeric Hyperliquid oid" - added
Input schema / properties / sessionPrivateKey / descriptionAdded value: +"Structured mode: session private key" - added
Input schema / properties / walletAddress / descriptionAdded value: +"Structured mode: CONTROL wallet address from sign-in (not the managed address)"
- Changed
hl_close_outcome_order11 fields changed- added
Input schema / properties / apiKey / descriptionAdded value: +"Structured mode: API key" - added
Input schema / properties / coin / descriptionAdded value: +"Side coin \"#<assetId>\" from hl_outcomes sides[].coin. Give exactly one of coin / sideIndex / sideLabel." - added
Input schema / properties / computedData / descriptionAdded value: +"Pre-built mode ONLY: encrypted payload. Must be sent alone (no structured fields)." - removed
Input schema / properties / dexRemoved value: -{ - "type": "string" -} - added
Input schema / properties / managedAddressAdded value: +{ + "description": "Managed wallet; enables position-aware partial-exit checks", + "type": "string" +} - added
Input schema / properties / price / descriptionAdded value: +"Limit price (omit for isMarket)" - added
Input schema / properties / sessionPrivateKey / descriptionAdded value: +"Structured mode: session private key" - added
Input schema / properties / sideIndexAdded value: +{ + "description": "Side index in sides[] (sides are NOT always Yes/No; read the labels)", + "type": "integer" +} - added
Input schema / properties / sideLabelAdded value: +{ + "description": "Exact side label from sides[].label, e.g. \"No\" or a team name", + "type": "string" +} - added
Input schema / properties / size / descriptionAdded value: +"Contracts to sell; omit for the full position" - added
Input schema / properties / walletAddress / descriptionAdded value: +"Structured mode: CONTROL wallet address from sign-in (not the managed address)"
- Changed
hl_create_outcome_order15 fields changed- added
Input schema / properties / apiKey / descriptionAdded value: +"Structured mode: API key" - changed
Input schema / properties / coin / descriptionPrevious value: -"Outcome asset id, e.g. \"#1010\" (outcome 101 Yes)"New value: +"Side coin \"#<assetId>\" from hl_outcomes sides[].coin. Give exactly one of coin / sideIndex / sideLabel." - added
Input schema / properties / computedData / descriptionAdded value: +"Pre-built mode ONLY: encrypted payload. Must be sent alone (no structured fields)." - removed
Input schema / properties / dexRemoved value: -{ - "type": "string" -} - added
Input schema / properties / isBuy / descriptionAdded value: +"Structured mode: true buys side tokens; false sells held tokens" - added
Input schema / properties / isMarket / descriptionAdded value: +"Take the book at ±5% of top of book" - added
Input schema / properties / managedAddressAdded value: +{ + "description": "Managed wallet; enables position-aware sell checks", + "type": "string" +} - added
Input schema / properties / outcomeId / descriptionAdded value: +"Structured mode: outcome market id" - changed
Input schema / properties / price / descriptionPrevious value: -"Limit price in [0,1]; pass \"0\" for market"New value: +"Limit price, e.g. \"0.42\" (omit for isMarket)" - added
Input schema / properties / reduceOnly / descriptionAdded value: +"Ignored by the backend" - added
Input schema / properties / sessionPrivateKey / descriptionAdded value: +"Structured mode: session private key" - added
Input schema / properties / sideIndexAdded value: +{ + "description": "Side index in sides[] (sides are NOT always Yes/No; read the labels)", + "type": "integer" +} - added
Input schema / properties / sideLabelAdded value: +{ + "description": "Exact side label from sides[].label, e.g. \"No\" or a team name", + "type": "string" +} - changed
Input schema / properties / size / descriptionPrevious value: -"Order size in contracts"New value: +"Whole contracts, e.g. \"30\"" - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"CONTROL wallet address from sign-in"New value: +"Structured mode: CONTROL wallet address from sign-in (not the managed address)"
- Changed
hl_outcome_account3 fields changed- changed
Input schema / properties / outcomeId / descriptionPrevious value: -"Outcome market id, e.g. 101"New value: +"Outcome market id from hl_outcomes" - added
Input schema / properties / rawAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / userAddress / descriptionAdded value: +"MANAGED wallet address (outcome balances live there)"
- Added
hl_outcome_check_collateral - Changed
hl_outcomes12 fields changed- added
Input schema / properties / detailAdded value: +{ + "description": "Full market records (rules, params, settlement). Default: compact rows", + "type": "boolean" +} - removed
Input schema / properties / dexRemoved value: -{ - "type": "string" -} - added
Input schema / properties / excludeFallbackAdded value: +{ + "description": "Hide \"none of the listed outcomes\" legs", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Markets per page, default 20", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Pagination offset (use nextOffset)", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Case-insensitive text match on title / side labels / params, or an exact outcomeId", + "type": "string" +} - added
Input schema / properties / rawAdded value: +{ + "description": "Return the raw backend payload instead", + "type": "boolean" +} - added
Input schema / properties / sortByAdded value: +{ + "description": "volume: highest 24h volume first (implies withVolume); expiry: soonest first", + "enum": [ + "volume", + "expiry" + ], + "type": "string" +} - added
Input schema / properties / stateAdded value: +{ + "anyOf": [ + { + "enum": [ + "active", + "pre_launch", + "expired", + "settled" + ], + "type": "string" + }, + { + "items": { + "$ref": "#/properties/state/anyOf/0" + }, + "type": "array" + } + ], + "description": "Filter by trading state, e.g. \"active\"" +} - removed
Input schema / properties / statusRemoved value: -{ - "type": "string" -} - added
Input schema / properties / volumeTimeoutMsAdded value: +{ + "maximum": 10000, + "minimum": 100, + "type": "integer" +} - changed
Input schema / properties / withVolume / descriptionPrevious value: -"Include 24h volume per market (slower)"New value: +"Attach 24h volume (bounded by volumeTimeoutMs, default 2500)"
- Changed
limit_buy4 fields changed- changed
Input schema / properties / amount / descriptionPrevious value: -"Native token to spend in raw units (wei/lamports)"New value: +"Native token to spend in raw units (wei/lamports), a positive integer string" - changed
Input schema / properties / lossPercent / descriptionPrevious value: -"Stop-loss % below trigger (e.g. '25'), '0' to skip"New value: +"Stop-loss % below trigger, whole number under 100 (e.g. '25'), '0' to skip" - changed
Input schema / properties / profitPercent / descriptionPrevious value: -"Take-profit % above trigger (e.g. '50'), '0' to skip"New value: +"Take-profit % above trigger, whole number (e.g. '50'), '0' to skip" - changed
Input schema / properties / triggerPrice / descriptionPrevious value: -"USD price at which to trigger the buy"New value: +"USD price at which to trigger the buy (plain decimal)"
- Changed
limit_sell2 fields changed- changed
Input schema / properties / amount / descriptionPrevious value: -"Token amount in raw units"New value: +"Token amount in raw units (token decimals), a positive integer string" - changed
Input schema / properties / triggerPrice / descriptionPrevious value: -"USD price at which to trigger the sell"New value: +"USD price at which to trigger the sell (plain decimal)"
- Added
pause_copy_trade - Added
pause_hl_copy_trade - Added
resume_copy_trade - Added
resume_hl_copy_trade - Changed
sell_token12 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - added
Input schema / properties / apiKeyAdded value: +{ + "description": "GDEX API key used to encrypt the signed trade", + "type": "string" +} - changed
Input schema / properties / dex / descriptionPrevious value: -"Preferred DEX"New value: +"Not supported: the backend picks the route. Rejected when set." - changed
Input schema / properties / outputToken / descriptionPrevious value: -"Override output token address"New value: +"Omit, or the chain's native token. Anything else is rejected (use usdc_sell for USDC)." - changed
Input schema / properties / priorityFee / descriptionPrevious value: -"Solana priority fee in lamports (integer, Solana only)"New value: +"Solana priority fee in lamports (integer, max 50000000 = 0.05 SOL). Solana only." - changed
Input schema / properties / priorityFee / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / referrer / descriptionPrevious value: -"Referral address"New value: +"Not supported by purchase_v2/sell_v2. Rejected when set." - added
Input schema / properties / sessionPrivateKeyAdded value: +{ + "description": "Session private key from sign-in", + "type": "string" +} - removed
Input schema / properties / slippage / defaultRemoved value: -1 - changed
Input schema / properties / slippage / descriptionPrevious value: -"Max slippage tolerance in percent"New value: +"Slippage percent, Solana and Sui only (sent as bps, max 50). Rejected on EVM, where the account's stored slippage applies. Omit to use the stored setting." - added
Input schema / properties / tokenDecimalsAdded value: +{ + "description": "Only for an absolute amount of a token missing from the managed holdings", + "type": "integer" +} - changed
Input schema / properties / walletAddress / descriptionPrevious value: -"Wallet address to trade from"New value: +"Control wallet address (the GDEX userId)"
- Changed
update_copy_trade12 fields changed- changed
Input schema / properties / buyMode / descriptionPrevious value: -"1 = fixed, 2 = percentage"New value: +"1 = fixed SOL amount, 2 = percentage of trader amount" - changed
Input schema / properties / copyBuyAmount / descriptionPrevious value: -"Amount or percentage"New value: +"SOL amount (mode 1) or percentage 0-100 (mode 2)" - added
Input schema / properties / copySellAdded value: +{ + "default": false, + "description": "Also copy sells", + "type": "boolean" +} - changed
Input schema / properties / copyTradeName / descriptionPrevious value: -"Updated label"New value: +"Label" - added
Input schema / properties / excludedDexNumbersAdded value: +{ + "description": "DEX numbers to exclude", + "items": { + "type": "number" + }, + "type": "array" +} - removed
Input schema / properties / excludedProgramIdsRemoved value: -{ - "description": "Program IDs to exclude", - "items": { - "type": "string" - }, - "type": "array" -} - added
Input schema / properties / gasPriceAdded value: +{ + "description": "Priority fee setting (default \"0\")", + "type": "string" +} - added
Input schema / properties / isBuyExistingTokenAdded value: +{ + "default": false, + "description": "Buy tokens the trader already holds", + "type": "boolean" +} - changed
Input schema / properties / isChangeStatus / descriptionPrevious value: -"WARNING: Also permanently deletes"New value: +"Toggle active/paused relative to the stored state" - changed
Input schema / properties / isDelete / descriptionPrevious value: -"Permanently delete the copy trade"New value: +"Permanently delete the configuration (positions stay open)" - changed
Input schema / properties / lossPercent / descriptionPrevious value: -"Stop-loss %"New value: +"Stop-loss % (> 0, < 100)" - changed
Input schema / properties / profitPercent / descriptionPrevious value: -"Take-profit %"New value: +"Take-profit % (> 0)"
- Added
update_copy_trade_settings - Changed
update_hl_copy_trade7 fields changed- changed
Input schema / properties / copyMode / descriptionPrevious value: -"1 = fixed, 2 = proportion"New value: +"1 = fixed USD per order, 2 = proportion" - changed
Input schema / properties / fixedAmountCostPerOrder / descriptionPrevious value: -"Amount or ratio"New value: +"USD amount (mode 1) or ratio (mode 2)" - changed
Input schema / properties / isChangeStatus / descriptionPrevious value: -"WARNING: Also permanently deletes"New value: +"Toggle active/paused relative to the stored state" - changed
Input schema / properties / isDelete / descriptionPrevious value: -"Permanently delete"New value: +"Permanently delete the configuration (positions stay open)" - changed
Input schema / properties / lossPercent / descriptionPrevious value: -"Stop-loss %"New value: +"Stop-loss % (> 0, < 100)" - added
Input schema / properties / oppositeCopy / descriptionAdded value: +"Trade opposite to the trader" - changed
Input schema / properties / profitPercent / descriptionPrevious value: -"Take-profit %"New value: +"Take-profit % (> 0)"
- Added
update_hl_copy_trade_settings - Changed
update_order4 fields changed- changed
Input schema / properties / amount / descriptionPrevious value: -"New amount in raw units"New value: +"New amount in raw units (required unless isDelete)" - changed
Input schema / properties / lossPercent / descriptionPrevious value: -"New SL % (buy orders only)"New value: +"New SL %, whole number under 100, '0' = none (required unless isDelete)" - changed
Input schema / properties / profitPercent / descriptionPrevious value: -"New TP % (buy orders only)"New value: +"New TP %, whole number, '0' = none; buy orders only, sell orders ignore it (required unless isDelete)" - changed
Input schema / properties / triggerPrice / descriptionPrevious value: -"New trigger price in USD"New value: +"New trigger price in USD (required unless isDelete)"
- Added
wait_for_trade
62 tool updates
v4.12.0- Changed
add_comment2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "tokenAddress", - "chain", - "message", - "userId" -]New value: +[ + "tokenAddress", + "chain", + "message" +]
- Changed
build_trade_payload2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "action", - "userId", - "tokenAddress", - "amount", - "nonce", - "sessionPrivateKey" -]New value: +[ + "action", + "tokenAddress", + "amount", + "nonce" +]
- Changed
buy_token3 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - added
Input schema / properties / amount / patternAdded value: +"^\\d+(\\.\\d+)?$" - changed
Input schema / properties / priorityFee / descriptionPrevious value: -"Solana priority fee in SOL"New value: +"Solana priority fee in lamports (integer, Solana only)"
- Changed
cancel_all_perp_orders2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey" -]
- Changed
cancel_perp_order2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "coin", - "orderId" -]New value: +[ + "coin", + "orderId" +]
- Changed
close_all_positions2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey" -]
- Changed
close_perp_position8 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / properties / coin / descriptionPrevious value: -"Asset symbol to close"New value: +"Asset symbol to close; builder-DEX assets as 'dex:ASSET', e.g. 'xyz:TSLA'" - added
Input schema / properties / dexAdded value: +{ + "description": "Builder DEX for a bare coin, e.g. 'xyz' (omit for the default dex)", + "type": "string" +} - added
Input schema / properties / positionAddressAdded value: +{ + "description": "Address whose HL account holds the position — normally the MANAGED wallet from sign-in. Defaults to walletAddress.", + "type": "string" +} - changed
Input schema / properties / price / descriptionPrevious value: -"Price for the close order"New value: +"Close price; omit or '0' to use the mark price" - changed
Input schema / properties / size / descriptionPrevious value: -"Size to close (use full position size for 100% close)"New value: +"Size to close as a decimal string; omit to close the whole position" - added
Input schema / properties / szDecimalsAdded value: +{ + "description": "Market size decimals (HL meta szDecimals); rejects a size with more decimals", + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "coin", - "size", - "price" -]New value: +[ + "coin" +]
- Changed
create_copy_trade2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "traderWallet", - "copyTradeName", - "chainId", - "buyMode", - "copyBuyAmount", - "lossPercent", - "profitPercent" -]New value: +[ + "traderWallet", + "copyTradeName", + "chainId", + "buyMode", + "copyBuyAmount", + "lossPercent", + "profitPercent" +]
- Changed
create_hl_copy_trade2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "traderWallet", - "copyTradeName", - "copyMode", - "fixedAmountCostPerOrder", - "lossPercent", - "profitPercent" -]New value: +[ + "traderWallet", + "copyTradeName", + "copyMode", + "fixedAmountCostPerOrder", + "lossPercent", + "profitPercent" +]
- Changed
direct_cancel_order2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "privateKey", - "coin", - "orderId" -]New value: +[ + "coin", + "orderId" +]
- Changed
execute_bridge2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "fromChainId", - "toChainId", - "amount", - "userId", - "sessionPrivateKey", - "apiKey" -]New value: +[ + "fromChainId", + "toChainId", + "amount" +]
- Changed
execute_cross_perp2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "privateKey", - "coin", - "isLong", - "price", - "positionSize" -]New value: +[ + "coin", + "isLong", + "price", + "positionSize" +]
- Changed
execute_isolated_perp2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "privateKey", - "coin", - "isLong", - "price", - "positionSize", - "leverage" -]New value: +[ + "coin", + "isLong", + "price", + "positionSize", + "leverage" +]
- Changed
execute_spot2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "privateKey", - "coin", - "isBuy", - "price", - "size" -]New value: +[ + "coin", + "isBuy", + "price", + "size" +]
- Changed
explain_workflow1 field changed- changed
Input schema / properties / workflow / enumPrevious value: -[ - "spot-trade", - "perp-trade", - "copy-trade", - "perp-copy-trade", - "bridge", - "auth", - "limit-order", - "perp-funding", - "full-trading-app" -]New value: +[ + "spot-trade", + "perp-trade", + "copy-trade", + "perp-copy-trade", + "bridge", + "auth", + "limit-order", + "perp-funding", + "full-trading-app", + "usdc-wallet" +]
- Added
gdex_accounts - Added
gdex_connect - Added
gdex_disconnect - Changed
generate_evm_wallet2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / revealSecretsAdded value: +{ + "description": "Return privateKey and mnemonic too (they then appear in the conversation)", + "type": "boolean" +}
- Changed
generate_session_keypair2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / revealPrivateKeyAdded value: +{ + "description": "Return sessionPrivateKey too (it then appears in the conversation)", + "type": "boolean" +}
- Changed
get_bridge_orders2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "userId", - "data" -]
- Changed
get_copy_trade_list2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "userId", - "data" -]
- Changed
get_copy_trade_tx_list2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "userId", - "data" -]
- Changed
get_hl_copy_trade_list2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "userId", - "data" -]
- Changed
get_hl_copy_trade_tx_list2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "userId", - "data" -]
- Changed
get_limit_orders2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "userId", - "data", - "chainId" -]New value: +[ + "chainId" +]
- Changed
get_sdk_pattern1 field changed- changed
Input schema / properties / operation / enumPrevious value: -[ - "spot-trade", - "perp-trade", - "copy-trade", - "perp-copy-trade", - "bridge", - "auth", - "portfolio", - "token-discovery", - "limit-orders", - "perp-funding", - "wallet-setup" -]New value: +[ + "spot-trade", + "perp-trade", + "copy-trade", + "perp-copy-trade", + "bridge", + "auth", + "portfolio", + "token-discovery", + "limit-orders", + "perp-funding", + "wallet-setup", + "usdc-wallet" +]
- Changed
get_watchlist2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "userId" -]
- Changed
hl_cancel_outcome_order1 field changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +}
- Changed
hl_close_outcome_order1 field changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +}
- Changed
hl_create_outcome_order1 field changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +}
- Changed
hl_enable_trading1 field changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +}
- Changed
hl_swap_collateral1 field changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +}
- Changed
limit_buy2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "chainId", - "tokenAddress", - "amount", - "triggerPrice" -]New value: +[ + "chainId", + "tokenAddress", + "amount", + "triggerPrice" +]
- Changed
limit_sell2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "chainId", - "tokenAddress", - "amount", - "triggerPrice" -]New value: +[ + "chainId", + "tokenAddress", + "amount", + "triggerPrice" +]
- Changed
open_perp_position2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "coin", - "isLong", - "price", - "size" -]New value: +[ + "coin", + "isLong", + "price", + "size" +]
- Changed
perp_deposit2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "tokenAddress", - "amount" -]New value: +[ + "tokenAddress", + "amount" +]
- Changed
perp_withdraw2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "amount" -]New value: +[ + "amount" +]
- Changed
place_perp_order4 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - added
Input schema / properties / isMarket / descriptionAdded value: +"True for market (via create_order), false for limit" - changed
Input schema / properties / price / descriptionPrevious value: -"Price in USD"New value: +"Price in USD ('0' with isMarket=true uses the mark price)" - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "coin", - "isLong", - "price", - "size" -]New value: +[ + "coin", + "isLong", + "price", + "size" +]
- Changed
sell_token2 fields changed- added
Input schema / properties / amount / patternAdded value: +"^\\d+(\\.\\d+)?%?$" - changed
Input schema / properties / priorityFee / descriptionPrevious value: -"Solana priority fee in SOL"New value: +"Solana priority fee in lamports (integer, Solana only)"
- Changed
set_leverage2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "walletAddress", - "sessionPrivateKey", - "coin", - "leverage" -]New value: +[ + "coin", + "leverage" +]
- Changed
trending_register2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "tokenAddress", - "chain", - "userId" -]New value: +[ + "tokenAddress", + "chain" +]
- Changed
update_copy_trade2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "copyTradeId", - "traderWallet", - "chainId", - "buyMode", - "copyBuyAmount", - "lossPercent", - "profitPercent" -]New value: +[ + "copyTradeId", + "traderWallet", + "chainId", + "buyMode", + "copyBuyAmount", + "lossPercent", + "profitPercent" +]
- Changed
update_hl_copy_trade2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "copyTradeId", - "traderWallet", - "copyTradeName", - "copyMode", - "fixedAmountCostPerOrder", - "lossPercent", - "profitPercent" -]New value: +[ + "copyTradeId", + "traderWallet", + "copyTradeName", + "copyMode", + "fixedAmountCostPerOrder", + "lossPercent", + "profitPercent" +]
- Changed
update_order2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "apiKey", - "userId", - "sessionPrivateKey", - "chainId", - "orderId" -]New value: +[ + "chainId", + "orderId" +]
- Added
usdc_buy - Added
usdc_buy_with_native - Added
usdc_convert_native - Added
usdc_estimate_bridge - Added
usdc_execute_bridge - Added
usdc_get_balances - Added
usdc_get_bridge_orders - Added
usdc_get_bridge_status - Added
usdc_get_convert_quote - Added
usdc_get_deferred_trade - Added
usdc_get_funding_status - Added
usdc_get_pending_trades - Added
usdc_get_trade_quote - Added
usdc_retry_sell - Added
usdc_sell - Added
usdc_wait_for_trade - Changed
vote_sentiment2 fields changed- added
Input schema / properties / accountRefAdded value: +{ + "description": "Connected account from gdex_connect. Supplies session key, wallet address, API key and session data so no secret is passed in chat", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "tokenAddress", - "chain", - "sentiment", - "userId" -]New value: +[ + "tokenAddress", + "chain", + "sentiment" +]
117 tool updates
v4.11.3- First observed
add_comment - First observed
associate_email - First observed
auth_login - First observed
build_sign_in_payload - First observed
build_trade_payload - First observed
buy_token - First observed
cancel_all_perp_orders - First observed
cancel_perp_order - First observed
change_watchlist - First observed
close_all_positions - First observed
close_perp_position - First observed
create_copy_trade - First observed
create_hl_copy_trade - First observed
direct_cancel_order - First observed
estimate_bridge - First observed
execute_bridge - First observed
execute_cross_perp - First observed
execute_isolated_perp - First observed
execute_spot - First observed
explain_workflow - First observed
generate_evm_wallet - First observed
generate_pnl - First observed
generate_session_keypair - First observed
get_account_state - First observed
get_all_mid_prices - First observed
get_api_info - First observed
get_balances - First observed
get_bigbuys - First observed
get_bridge_orders - First observed
get_chain_info - First observed
get_comments - First observed
get_component_guide - First observed
get_copy_trade_custom_wallets - First observed
get_copy_trade_dexes - First observed
get_copy_trade_gems - First observed
get_copy_trade_guide - First observed
get_copy_trade_list - First observed
get_copy_trade_tx_list - First observed
get_copy_trade_wallets - First observed
get_currently_live - First observed
get_hl_all_assets - First observed
get_hl_clearinghouse_state - First observed
get_hl_copy_trade_list - First observed
get_hl_copy_trade_tx_list - First observed
get_hl_deposit_tokens - First observed
get_hl_meta_and_asset_ctxs - First observed
get_hl_open_orders - First observed
get_hl_outcome_volumes - First observed
get_hl_perp_dexes - First observed
get_hl_spot_state - First observed
get_hl_top_traders - First observed
get_hl_top_traders_by_pnl - First observed
get_hl_trade_history - First observed
get_hl_user_stats - First observed
get_limit_orders - First observed
get_live_status - First observed
get_mark_price - First observed
get_native_prices - First observed
get_newest_tokens - First observed
get_nof1_analytics - First observed
get_ohlcv - First observed
get_perp_positions - First observed
get_portfolio - First observed
get_retailers - First observed
get_sdk_pattern - First observed
get_token_details - First observed
get_token_image - First observed
get_token_trades - First observed
get_top_tokens - First observed
get_top_traders - First observed
get_trade_history - First observed
get_trader_leverage - First observed
get_trading_guide - First observed
get_trending_tokens - First observed
get_usdc_balance - First observed
get_wallet_info - First observed
get_wallet_performance - First observed
get_watchlist - First observed
get_xstocks - First observed
get_zora_tokens - First observed
hl_builder_referral - First observed
hl_cancel_outcome_order - First observed
hl_close_outcome_order - First observed
hl_create_outcome_order - First observed
hl_enable_trading - First observed
hl_list_user_copy_pnl - First observed
hl_outcome_account - First observed
hl_outcomes - First observed
hl_ref_claim - First observed
hl_ref_info - First observed
hl_swap_collateral - First observed
hl_tx_list - First observed
import_token - First observed
limit_buy - First observed
limit_sell - First observed
managed_purchase - First observed
managed_sell - First observed
managed_sign_in - First observed
managed_trade_status - First observed
oauth_login - First observed
open_perp_position - First observed
perp_deposit - First observed
perp_withdraw - First observed
place_perp_order - First observed
search_gdex_docs - First observed
sell_token - First observed
set_leverage - First observed
transfer_native - First observed
transfer_token - First observed
trending_booking_status - First observed
trending_list - First observed
trending_options - First observed
trending_register - First observed
update_copy_trade - First observed
update_hl_copy_trade - First observed
update_order - First observed
vote_sentiment
TDQS
Scored across 154 tools
Massive overlap across trading entry points: execute_spot, managed_purchase, buy_token, usdc_buy, usdc_buy_with_native and gdex_execute_trade all initiate buys, and sell paths are similarly duplicated. Balance/status tools also collide (get_balances, get_portfolio, get_wallet_info, get_trading_funds, usdc_get_balances, gdex_positions), and auth has many near-equivalent paths. Descriptions add guidance but the agent must still choose among several plausible tools for one intent.
The surface mixes verb-first actions (get_top_traders, create_copy_trade, pause_copy_trade) with noun/verb phrases (limit_buy, managed_purchase, buy_token, trending_list) and family prefixes (hl_, usdc_, gdex_, get_, update_). Prefix families help, but there is no single predictable convention across the set.
154 tools is far beyond a coherent toolset; many are duplicates, low-level manual variants, or documentation wrappers that should be consolidated. This size makes selection and maintenance impractical.
The domain is covered remarkably broadly: spot, perp, bridging, outcomes, copy trading, balances, auth, docs, watchlist, and social actions. Gaps are mostly minor or intentional (some tools flagged as broken, and certain lifecycle helpers are delegated to lower-level endpoints), but the enormous surface creates dead ends through duplication rather than missing capability.
Maintenance
Related MCP Connectors
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Official MCP server for subfeed.app — the cloud for agents. 15+ tools for AI agents to register, build, and deploy other agents. Zero human required. Start here: subfeed.app/skill.md
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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.3MIT
- AlicenseNot gradedqualityDmaintenanceAI-to-AI marketplace MCP server with 46 tools — swap 65+ crypto tokens on 7 chains, rent GPUs, trade 25 tokenized stocks, on-chain escrow (Solana + Base), DeFi yields, sentiment analysis, wallet monitoring, and image generation. Supports USDC payments across 14 blockchains.MIT
- AlicenseNot gradedqualityDmaintenanceMCP (Model Context Protocol) server for the MAIN DEX on Base. Provides AI agents (Claude, Cursor, etc.) with tools to interact with the protocol: swap tokens, manage liquidity, enter/exit ALM strategies(10% APY), and more.MIT
- AlicenseAqualityBmaintenanceMCP server providing AI agents with native access to Jupiter's full DeFi stack on Solana. It offers 17 tools covering swaps, tokens, lending, limit orders, DCA, prediction markets, perpetuals, and portfolio management.16MIT