AlphaPipeline
AlphaPipeline is a pay-per-call (x402/USDC on Base) and MCP-accessible read-only market-data and pre-trade safety API for on-chain trading agents.
Pre-trade security (paid, GoPlus/Honeypot.is):
security.token_risk(honeypot, buy/sell tax, mintability, ownership, risk flags, risk_level),security.contract_health_audit(LP lock/burn, top unlocked holders, liquidity_health), andsecurity.token_diagnostic(both bundled with deduped risk flags).DEX liquidity & slippage:
dex.liquidity_slippage— pool liquidity, 24h volume, estimated slippage plus fixed $1k/$5k/$10k tiers, pool fee, and stablecoin-quote checks before sizing a swap.CEX–DEX arbitrage:
arb.spread_matrix— gross/net spread, direction, and gas-adjusted profitability flag (not for Upbit-specific checks).Derivatives:
derivatives.funding_rate(Bybit/Binance funding, mark/index price, OI) andderivatives.funding_apr_matrix(funding annualized to APR with carry-trade breakeven days), plusderivatives.whale_position_auditfor auditing a supplied Hyperliquid wallet's positions, leverage, PnL, and liquidation distance.Prediction markets:
prediction.neg_risk_arbitrage(Polymarket multi-outcome basket arb with VWAP-priced executable capacity),prediction.exit_capacity_audit(can a position size actually fill, at what avg price/impact), and HIP-4 toolsprediction.hip4_snapshot(Hyperliquid outcome-market probabilities) andprediction.hip4_price_ladder(a strike-sorted "above $X" distribution).Macro/market context:
calendar.macro_dday(FOMC/CPI/NFP countdown from a static calendar),market.cycle_compare(BTC/ETH vs prior halving cycles plus dominance, DXY, 10Y), andmarket.oracle_gap(Hyperliquid mid vs mark/oracle basis-point gap with anelevatedflag).Free onboarding tools:
market.kimchi_alert(Upbit-vs-global Korea premium with reverse-premium and 1h-surge alerts) andget_token_dump_risk(Sablier vesting/unlock overhang proxy with vesting progress).Web utility:
convert_to_markdownconverts any public HTML URL into clean, token-efficient markdown (static fetch, 15s timeout, structured errors, no auth/binary/JS-rendered support).Access model: free
tools/listdiscovery, MCP viaPOST /mcp, REST under/v1/<domain>/..., payment terms in the base64payment-requiredheader on HTTP 402; it returns raw data only and never a buy/no-buy verdict or trade execution.
AlphaPipeline
A pre-flight safety gate for on-chain trading agents — rug-pull/honeypot checks before you buy, plus market/derivatives data — pay-per-call ($0.005–$0.03 USDC), no signup, no API key, no OAuth. Check a token for honeypot/tax/liquidity risk before a swap, or pull funding rates, DEX slippage, Korea price premiums, Polymarket arbitrage signals, and Hyperliquid HIP-4 prediction-market odds. Authenticate and pay in a single request via the x402 protocol (HTTP 402) on Base, or call it as a remote MCP server from Claude Desktop, Cursor, or any MCP client.
Why AlphaPipeline
AlphaPipeline is a machine-first data API. Every endpoint is metered per call using x402: a request without a payment header gets back a standard HTTP 402 response describing exactly how to pay (asset, amount, network, recipient). No account creation, no dashboard, no API key issuance — sign, retry the request with the payment attached, and you get the data back in the same request/response cycle.
It is also exposed as a remote MCP server (POST /mcp) so agent frameworks (Claude Desktop, Cursor, LangChain, CrewAI, and anything else that speaks MCP) can discover and call it with zero custom integration code.
The security cluster is the most battle-tested part of this API. security.token_risk, security.contract_health_audit, and security.token_diagnostic have been run as a live pre-buy safety gate ahead of real on-chain swaps on Base — not just informational data, but an actual pass/fail input wired into a trading pipeline before it risked funds. None of the three return a qualitative verdict field (no safe_to_execute: true/false) — they return raw GoPlus/Honeypot.is numbers and leave the buy/no-buy decision to your own code.
Discovery is always free.
initializeandtools/listnever require payment — browse the full tool catalog before you decide to pay.Two tools are permanent free onboarding endpoints (
unlocks.dump_riskandmarket.kimchi_alert, see below) so an agent can verify connectivity, latency, and response schema before it starts paying for the security cluster and the rest.Settlement is Coinbase CDP (Developer Platform) Facilitator on Base mainnet (
eip155:8453), asset USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913).
The endpoints have not been reviewed by Coinbase — please ensure you trust them prior to sending funds.
Related MCP server: kr-crypto-intelligence
Quickstart — Remote MCP
Add this to your MCP client's config (Claude Desktop claude_desktop_config.json, Cursor .cursor/mcp.json, or equivalent):
{
"mcpServers": {
"alphapipeline": {
"url": "https://alphapipeline-eu.onrender.com/mcp"
}
}
}tools/list works immediately with no payment. tools/call on a priced tool requires an x402-aware client that can sign and retry a payment (a wallet-holding bot/agent client — most stock chat UIs cannot pay automatically). See examples/ for a working Python client using the official x402 SDK.
Quickstart — Plain REST / x402
curl -s "https://alphapipeline-eu.onrender.com/v1/security/token-risk?chain_id=8453&contract_address=0x..."
# -> HTTP 402, payment terms in the `payment-required` response header (base64 JSON)
# sign a payment, retry with the PAYMENT-SIGNATURE header attached -> 200 + dataNote for client authors: this server speaks x402 v2 — the 402 response body is an empty
{}; the actual payment terms (accepts array, price, asset, pay-to address) are base64-JSON in thepayment-requiredresponse header, not the body. A client written against the older body-shaped convention will get an empty object with no error, not a loud failure. Decode the header instead.
Note on
unlocks.dump_riskandmarket.kimchi_alert: both are intentionally free (no x402 payment required) as onboarding tools — they're informational market-context signals, not part of the validated pre-trade security cluster (security.token_risk,security.contract_health_audit,security.token_diagnostic), which remains paid. If a third-party discovery catalog (e.g. x402 Bazaar) still shows a stale non-zero price for either from before this change, treat this server's own/response and MCPtools/listoutput as the source of truth — they always reflect the live price.Note on tool names: MCP tool names use a
domain.tool_namedot-notation (e.g.market.kimchi_alert) so the tool list forms a navigable tree by domain. The REST paths under/v1/<domain>/...are unaffected by this and remain stable.
Full protocol reference: /llms.txt · x402 docs
Try it now — no wallet, no signup, no payment
Before wiring up a paying client, run check-my-slippage to see this service return real, live data against a production endpoint:
npx check-my-slippageReal output (captured 2026-09-18, straight from production — not a mocked sample):
Checking live Polymarket exit-liquidity via AlphaPipeline...
Market: will-the-fed-decrease-interest-rates-by-25-bps-after-the-october-2026-meeting-... (sell)
Position size: 500 shares
Executable: true
Best quote: $0.0060
Avg exit price: $0.0060
Price impact: 0%
Data source: polymarket-clob
Latency: 88ms
Want this for any market/size, in your own bot?
-> https://github.com/parkyucheol-del/alphapipelineThis calls the free, rate-limited (10/min per IP) GET /v1/prediction/preview-slippage — no payment header, no query params, always runs against a fixed benchmark market so you can judge data quality before paying for prediction.exit_capacity_audit, which takes any market/size you supply. If npx check-my-slippage doesn't resolve on your machine, call the endpoint directly instead: curl https://alphapipeline-eu.onrender.com/v1/prediction/preview-slippage, or run it from source: node check-my-slippage/bin/index.js from a clone of this repo.
Copy-paste client — pre-flight safety gate before a DEX buy
If you're building a sniping/discovery bot that buys new tokens on Base, this is the pattern our own dogfooding bot (alphapipeline-dogfood-bot) uses as a hard, non-bypassable gate before every on-chain purchase: pay $0.03 for security.token-diagnostic, then apply your own thresholds to the raw fields it returns (this server never returns a safe_to_buy: true/false verdict — see Why AlphaPipeline). Adapted from examples/client_example.py:
# pip install "x402[https]" eth_account httpx
import asyncio, os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
API = "https://alphapipeline-eu.onrender.com"
async def is_safe_to_buy(contract_address: str, chain_id: int = 8453) -> bool:
account = Account.from_key(os.environ["EVM_PRIVATE_KEY"]) # dedicated small wallet only
client = x402Client()
register_exact_evm_client(client, EthAccountSigner(account))
async with x402HttpxClient(client) as http:
r = await http.get(f"{API}/v1/security/token-diagnostic",
params={"contract_address": contract_address, "chain_id": chain_id})
await r.aread()
diag = r.json() # $0.03 USDC charged on Base mainnet — no free tier for this one
return (
diag.get("is_honeypot") is not True
and (diag.get("buy_tax_pct") or 0) <= 10
and (diag.get("sell_tax_pct") or 0) <= 10
and diag.get("liquidity_health") in ("LOCKED", "PARTIALLY_LOCKED")
)
if __name__ == "__main__":
print(asyncio.run(is_safe_to_buy("0xYourTargetTokenContract")))Tune the thresholds (buy/sell tax %, which liquidity_health values you accept, risk_flags_count, etc.) to your own risk tolerance — the full field list is in the security.token-diagnostic schema below. This is exactly the logic our dogfooding bot runs on every candidate before it will spend real USDC.
Tools / Endpoints
Tool (MCP) | REST endpoint | Price | What it does |
|
| $0.01 | Pre-trade check, cheapest tier — batch-screening filter: LP lock/burn status (same GoPlus call as contract_health_audit, no extra upstream cost) plus GeckoTerminal top-pool USD liquidity (same source as dex.liquidity_slippage) in one minimal response. Run this first across many candidates to cheaply drop the ones with no real liquidity or unlocked LP, then only spend |
|
| $0.01 | Pre-trade check, cheapest tier — flags contracts impersonating a known mainstream asset (e.g. a fake "USDC"), using GoPlus's |
|
| $0.02 | Pre-trade check — call before buying or swapping: GoPlus/Honeypot.is-backed contract security audit (honeypot flag, buy/sell tax, mintability, ownership renouncement, plus individual GoPlus signals — cannot_sell_all, hidden_owner, transfer_pausable, selfdestruct, is_blacklisted, slippage_modifiable, owner concentration — folded into risk_flags). Screening many candidates? |
|
| $0.02 | Pre-trade check — LP (liquidity pool) lock/burn audit reusing the same GoPlus data as token-risk: flags whether liquidity is locked, burned, or freely held by a single wallet before you trust it. Screening many candidates? |
|
| $0.03 | Pre-trade check — bundles token_risk + contract_health_audit into one call (same GoPlus data, no new upstream calls) for a single go/no-go input before a swap. No composite score or letter grade — just both tools' fields plus a deduped risk_flags union. Cheaper than calling both separately. Screening many candidates? |
|
| $0.02 | GeckoTerminal-backed DEX pool liquidity and estimated trade slippage, plus fixed $1k/$5k/$10k |
|
| $0.02 | Audits a Hyperliquid wallet address you supply: open positions, leverage, |
|
| $0.01 | Bybit (primary) / Binance (fallback) perpetual futures funding rate, plus |
|
| $0.01 | Annualizes the current funding rate into an APR and computes carry-trade breakeven days against an assumed round-trip trading cost. |
|
| $0.02 | CEX (Coinbase spot) vs DEX (GeckoTerminal) spread calculator with gas-adjusted profitability flag, plus |
|
| $0.03 | Detects basket arbitrage in a Polymarket neg-risk (mutually-exclusive, multi-outcome) event — a full YES basket always settles to $1, so a basket price away from $1 (after costs) is a near risk-free edge. Also returns the actual liquidity-bottleneck size executable right now (VWAP-priced, not just top-of-book), and |
|
| $0.02 | Walks a Polymarket outcome's live order book to check whether a given position size can actually be filled right now, at what average price and price impact, plus |
|
| $0.01 | Real-time probability snapshot of Hyperliquid's HIP-4 outcome markets — crypto price binaries, sports game winners, tournament winners, Fed rate decisions, and any new market type Hyperliquid adds, all in one call. No curated market list: every |
|
| $0.01 | One underlying's HIP-4 "above $X" price-binary markets sorted into a strike ladder, each rung with its live Yes probability — read the market's implied price distribution at a glance instead of scanning |
|
| $0.01 | BTC/ETH price return since the current halving (2024-04-20) vs. the same elapsed days in the 2016 and 2020 post-halving cycles, plus today's real BTC dominance and DXY/US 10Y macro context. Reads a daily-refreshed cache (no live upstream call at request time). Raw price comparison, not true market-cap dominance history — see the response's own |
|
| $0.01 | Single-snapshot gap between Hyperliquid's mid price and its mark/oracle prices for one perpetual — the failure mode behind the 2026-10-10 Papertrade incident on HyperEVM (a protocol priced off raw mid instead of mark/oracle; an attacker moved ~$2.31B notional on Hyperliquid itself to swing the mid ~12bp, netting ~$1.28M). Returns |
|
| $0.01 | Countdown to the nearest major US macro event (FOMC, CPI, NFP) from a static, pre-loaded calendar — no external API call, never fails on an upstream outage. |
|
| $0.005 | Converts any webpage URL into clean, ad-free Markdown optimized for LLM context windows. |
|
| Free | Real-time Korea (Upbit) vs global reference price (Coinbase spot, CoinGecko fallback — not a live Binance orderbook) premium — the "kimchi premium" — with reverse-premium and 1h-surge alerts. Kept free by default as an onboarding tool: informational market context, not part of the paid pre-trade security cluster. |
|
| Free | On-chain (Sablier) proxy for token unlock/vesting dump risk, including |
[EXPERIMENTAL] |
| See below | Webhook push alerts on HIP-4 probability jumps / new markets, instead of polling |
Every response is timestamped in both UTC and KST, and every priced endpoint's payment prompt reads "Paid in USDC on Base." so a human looking at the 402 screen in a browser isn't left guessing which chain's USDC to send.
Event subscriptions (webhook push) — EXPERIMENTAL
2026-09-30 addition, modeled loosely on a still-draft MCP Events extension
(github.com/modelcontextprotocol/experimental-ext-triggers-events — not an
official spec yet, request/response shape may change). Instead of polling
GET /v1/prediction/hip4-snapshot yourself, you can register a webhook and
get pushed a Standard Webhooks-signed (webhook-id / webhook-timestamp /
webhook-signature, HMAC-SHA256 over "{id}.{timestamp}.{body}") POST when a
HIP-4 outcome's probability moves by at least a threshold, or a new HIP-4
market shows up.
Honest caveats before you rely on this:
It's polling, not a real push feed. Hyperliquid's HIP-4 has no webhook/streaming API, so under the hood this server re-fetches
get_hip4_snapshot()everyHIP4_EVENTS_POLL_INTERVAL_SECONDS(default 300s = 5 min) and diffs it. A jump can be reported up to that long after it actually happened.Disabled by default (
HIP4_EVENTS_ENABLED=false). The subscribe route isn't even registered with the payment middleware while disabled, and the handler itself double-checks and returns503— so you can never be charged for a subscription that will never deliver anything.Subscriptions may not survive a restart. They're persisted to a local JSON file (
HIP4_EVENTS_DATA_FILE, defaultdata/hip4_event_subscriptions.json), which is fine for a single long-running Render instance but is lost on a disk reset. Not backed by a real database (yet).hip4.resolving(resolution/settlement-imminent) is not implemented - Hyperliquid'soutcomeMetadoesn't expose a verified resolution timestamp, and this project's policy is never to fake a field it can't back with real data. Onlyhip4.prob_jumpandhip4.market_createdare live.MCP clients get the same three operations as
events/list/events/subscribe/events/unsubscribeJSON-RPC methods on/mcp(declared under the experimentalcapabilities.extensions["io.modelcontextprotocol/events"]key) -events/subscribeself-calls the same paid REST route internally, so pricing/payment is identical either way.Optional noise filter (
HIP4_EVENTS_CLEF_FILTER_ENABLED, defaultfalse). When on, eachhip4.prob_jumpcandidate is scored by Cloudflare Workers AI'sclef-flashdecision model (needsCLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_API_TOKEN) before delivery; candidates scored belowHIP4_EVENTS_CLEF_SIGNAL_THRESHOLD(default0.3) are not sent. No trading-volume or orderbook-depth data goes into that score - Hyperliquid's public HIP-4 API doesn't expose either - so it's reasoning from the probability move alone. If the Cloudflare call fails or the credentials are missing, this fails open: the event is delivered anyway, just without the extraclef_signalfield it would otherwise carry.
Quick test once HIP4_EVENTS_ENABLED=true is set and deployed:
curl -G https://alphapipeline-eu.onrender.com/v1/prediction/hip4-alerts/subscribe \
--data-urlencode "webhook_url=https://webhook.site/your-id" \
--data-urlencode "secret=replace-with-a-random-32-byte-secret"
# -> 402 with payment terms, same as any other endpoint here; pay, retry, get a subscription_id backNote: this is GET with query parameters, not POST with a JSON body -
see the note on secret in the endpoint description for the resulting
trade-off (it travels in the URL query string).
Data sources
Every number returned is either passed through unchanged from one of these upstreams, or a deterministic calculation on top of them — never a third-party estimate presented as our own:
Domain | Upstream(s) | Notes |
| Upbit (KRW) + Coinbase spot, CoinGecko fallback | Not a live Binance orderbook, despite the legacy |
| GoPlus Security API, Honeypot.is fallback (token_authenticity has no fallback) | Same underlying GoPlus data reused across all five; no independent second opinion. |
| Bybit v5 (primary), Binance premiumIndex (fallback) |
|
| Hyperliquid public API ( | No leaderboard/discovery endpoint exists upstream — you must supply the wallet address. |
| GeckoTerminal | Liquidity depth is a constant-product (50:50) approximation, not per-token real reserves — disclosed via the response's own |
| On-chain Sablier vesting streams (default, free) | VC/team classification and exact unlock timing require a paid DropsTab key (disabled by default) and are otherwise always |
| Static, pre-loaded calendar | No external API call — never fails on an upstream outage, but needs manual updates as events roll off the calendar. |
| Polymarket Gamma API (event/market metadata) + Polymarket CLOB API (order book) |
|
| Hyperliquid public API ( | No leaderboard/curated list — every market Hyperliquid currently lists shows up. The |
| Same Hyperliquid public API as | Pure re-sort/filter of |
| Hyperliquid public API ( | Mid/mark/oracle prices are Hyperliquid's own reported fields, read fresh each call (short-lived cache, |
| Yahoo Finance ( | Daily GitHub Actions cron writes a single JSON cache; the endpoint only reads that file. CoinMetrics Community (401 on everything now), CoinGecko's historical global market-cap chart (paid plans only), and CoinGecko's free Demo plan (365-day history cap) and Kraken's public OHLC (720-candle cap) were all tried and ruled out before landing on Yahoo — see |
| The URL you pass in | No third-party data provider — we fetch and convert the page you give us. |
[EXPERIMENTAL] | Same Hyperliquid public API as | Polling + diff, not a push feed from Hyperliquid — see "Event subscriptions" above. |
In progress — stock discrepancy feed (4-week data trial, started 2026-10-08)
Collecting hourly, not selling yet. scripts/collect_stock_discrepancy.py runs via .github/workflows/stock-discrepancy-collect.yml once an hour and appends to data-public/stock_discrepancy_log.jsonl (not data/ — that directory is gitignored for HIP-4 webhook secrets; this data has nothing sensitive in it). Nothing here is a paid endpoint — this is purely assembling the evidence to decide whether it should become one.
What's tracked: last regular-session close, Base B20 token price (Aerodrome, via GeckoTerminal), Hyperliquid HIP-3 stock perp mark price + funding, and the discrepancy % between them, per symbol, per hour. Symbol list: NVDA, AAPL, META, GOOGL — not TSLA/MSTR/COIN, which an earlier brief named but which don't have a confirmed Coinbase B20/cbStock token on Aerodrome as of this writing (re-check before adding them back in).
Launch/hold decision, due ~2026-11-05 (4 weeks from start) — needs 2 of 3 to clear:
Weekend discrepancy direction (Friday close → Sunday night) matches the following Monday's opening-gap direction ≥65% of the time (sample: 4 weekends × symbol count, roughly 16-20 data points).
A discrepancy >1% occurs at least once per weekend, across any symbol — this is what makes an alert product viable in the first place.
Data gaps (
data_gap: truerows — pool illiquidity, upstream API errors) stay ≤10% of all rows.
If it doesn't clear 2 of 3: don't force a paid launch on a thin signal. Turn it into a free public dashboard instead and use it as a traffic funnel into the rest of AlphaPipeline.
Secondary, free feed: the same cron also snapshots Kalshi's KXBTC15M 15-minute/hourly crypto prediction markets (public, no-auth API) into data-public/kalshi_btc15m_log.jsonl, to compare against prediction.hip4_snapshot's own BTC probability later. No extra infrastructure cost; not part of the launch/hold decision above.
Disclaimer
AlphaPipeline provides quantitative market data and analytics for informational and research purposes only. It does not execute trades, place orders, hold custody of user funds, or provide brokerage/betting/gambling services of any kind — it is a read-only data layer. Users are solely responsible for ensuring their use of this data complies with the laws and regulations applicable in their own jurisdiction.
Links
Live service: https://alphapipeline-eu.onrender.com
Agent-readable spec: https://alphapipeline-eu.onrender.com/llms.txt
OpenAPI docs: https://alphapipeline-eu.onrender.com/docs
x402 Bazaar listing: https://www.x402bazaar.org/
Glama listing (verified, TDQS A / 4.4): https://glama.ai/mcp/connectors/com.onrender.alphapipeline/alpha-pipeline-agent-mcp
x402 protocol: https://docs.x402.org
License
See LICENSE.
Available Tools
18 toolsarb.spread_matrixAInspect
CEX-DEX arbitrage spread calculator: checks whether a global reference
price (Coinbase spot, CoinGecko fallback - NOT a specific exchange
orderbook, despite internal naming) and a DEX pool price (GeckoTerminal)
diverge enough to be worth trading after an assumed flat gas cost. Returns
gross/net spread, direction, and is_profitable.
Use this before executing a cross-venue arbitrage trade, or for kimchi-style
premium checks on non-Korean venues (use market.kimchi_alert instead for the
Upbit-specific case). net_spread_pct does NOT subtract the DEX pool's own
swap fee (see pool_fee_pct, typically 0.05-1%), CEX trading fees, CEX
deposit/withdrawal availability, or slippage beyond trade_size_usd - a
spread that clears the threshold before those costs may not clear it after,
so always re-verify with live quotes before executing. Requires exactly one
of pool_address or token_address; passing neither raises "invalid_input".
Args:
symbol: Ticker symbol, e.g. "SUI", "BTC", "ETH".
network: GeckoTerminal network id (default "base").
trade_size_usd: Hypothetical trade size in USD (default 1000.0).
min_spread_threshold_pct: Net spread threshold (%) above which
is_profitable is true (default 0.8).
pool_address: A specific DEX pool contract address.
token_address: Token contract address (auto-picks the most liquid pool).
One of pool_address or token_address is required.
Returns:
On success: {"success": true, "gross_spread_pct", "net_spread_pct",
"direction", "is_profitable", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| network | No | base | |
| pool_address | No | ||
| token_address | No | ||
| trade_size_usd | No | ||
| min_spread_threshold_pct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently reveals that net_spread_pct does NOT subtract pool swap fees, CEX fees, deposit/withdrawal availability, or slippage beyond trade_size_usd, and warns that a spread clearing the threshold may not be profitable after those costs. It also mentions the invalid_input error for missing addresses and the fallback price source logic. This is exemplary 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?
The description is dense but well-structured: purpose, usage, caveats, parameter list, and return format are clearly separated. Each sentence adds value—no filler. The caveats about fee exclusions are essential and not redundant. Despite length, it's warranted given the tool's complexity and lack of schema documentation.
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 six parameters, no output schema, and no annotations, the description covers all necessary aspects: what the tool does, when to use it, parameter semantics, return structure (success/failure), and critical limitations. Nothing an agent needs to decide correctness or call the tool properly 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 0%, so the description is the sole source of parameter meaning. It provides examples for symbol, explains network's GeckoTerminal id default, clarifies trade_size_usd as hypothetical USD size, min_spread_threshold_pct as the threshold for is_profitable, and distinguishes pool_address (specific pool) from token_address (auto-picks most liquid pool) with the required-one constraint. Every parameter is fully explained beyond its type/name.
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 ('checks whether... diverge enough to be worth trading') on a clear resource (CEX-DEX arbitrage spread) and differentiates from sibling market.kimchi_alert by explicitly noting when to use that alternative instead. The distinction between Coinbase/CoinGecko reference and GeckoTerminal DEX price is precise, leaving no ambiguity about what the tool computes.
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 explicitly says to use this before executing cross-venue arbitrage or for non-Korean kimchi-style checks, and names market.kimchi_alert as the alternative for Upbit-specific cases. It also states the requirement of exactly one of pool_address or token_address, clarifying the input constraint. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar.macro_ddayAInspect
Countdown to the nearest major US macro event (FOMC/CPI/NFP): event name,
exact date/time (UTC and KST), a D-Day countdown, impact level, and the
next few upcoming events. Static, pre-loaded 2026 calendar sourced from
official Federal Reserve/BLS release schedules - no live external API call,
so this never fails on an upstream outage and takes no parameters.
Use this to plan position sizing or avoid holding risk into a high-impact
macro print. Does NOT cover non-US events (e.g. ECB, BOJ) or company
earnings - only FOMC/CPI/NFP are tracked. Takes no arguments; calling it
with any input is unnecessary.
Returns:
On success: {"success": true, "nearest_event", "days_until", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and succeeds: it reveals the tool is static and pre-loaded for 2026, makes no live API call, cannot fail due to upstream outage, accepts no parameters, and specifies success/error return structures. This gives the agent realistic expectations about freshness and 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?
The description is well-structured with a summary, usage guidance, exclusions, and return format. It loses a point for minor redundancy between 'takes no parameters' and 'Takes no arguments; calling it with any input is unnecessary,' but every other sentence carries 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 zero-parameter, read-only calendar tool, the description is complete: it states the data source, scope, update nature, use case, output fields, and failure format. Even without an output schema, the agent can predict what a successful call returns and how to interpret errors.
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 no parameters, so the baseline is 4. The description reinforces this by stating twice that the tool takes no arguments and that any input is unnecessary, which removes any temptation to pass arguments.
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 opening line precisely describes the tool's output: a countdown to the nearest FOMC/CPI/NFP event with date/time, impact, and upcoming events. It also disambiguates by limiting coverage to US macro events and naming the exact event types tracked, so an agent won't mistake it for an earnings or non-US calendar.
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 tells the agent to use this for position sizing or holding risk planning before high-impact macro prints. It also states exclusions: non-US events and earnings are not covered, and only FOMC/CPI/NFP are tracked, making the appropriate use boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_markdownAInspect
Convert a webpage URL into clean, AI-friendly markdown by performing a live
HTTP GET (15s timeout) and stripping ads, navigation, and scripts, keeping
only the main content (capped at 3MB of source HTML).
Use this when you need to read a webpage's actual content but want to avoid
wasting tokens on HTML tags, ads, navigation menus, and scripts - or when raw
HTML parsing is causing hallucinations in downstream reasoning. Call it before
summarizing, extracting facts from, or answering questions about any arbitrary
public URL. Do NOT use it for: URLs requiring authentication/login (no cookies
or headers are sent); non-HTML resources such as PDFs, images, or other binary
files (returns "unsupported_content"); or JavaScript-rendered single-page apps
(this does a static HTML fetch, not a browser render, so client-side-only
content may come back sparse or empty). No other tool here does markdown
conversion - the sibling get_token_dump_risk is unrelated.
Failure modes returned as structured errors (never raised): "timeout" (15s
exceeded), "http_error" (non-2xx from the target site), "network_error"
(DNS/connection failure), "unsupported_content" (not HTML or over 3MB),
"invalid_url" (missing http(s):// scheme).
Args:
url: The full absolute URL of the webpage to convert, including scheme
(e.g. "https://example.com/article"). Relative paths are not accepted.
Returns:
On success: {"success": true, "url", "title", "markdown", "char_count"}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses the 15s timeout, 3MB source cap, no cookies/headers sent, static-HTML behavior, and structured error modes with their meanings. It also specifies that failures are returned as structured errors, never raised, which is important invocation 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?
The description is dense but well-organized: purpose first, then use cases, exclusions, failure modes, args, and returns. Every sentence adds actionable information, and the structure makes it easy for an agent to find the relevant detail quickly.
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 no output schema and minimal parameter schema, so the description must carry the full contract. It does: it documents the success return shape, the failure return shape, the error types, the URL format, the timeout, and the content cap. Nothing essential is missing for an agent to invoke and interpret 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 coverage is 0%, but the description fully compensates for the single url parameter. It specifies that the value must be a full absolute URL including scheme, gives an example, and explicitly states that relative paths are not accepted.
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 starts with a specific verb and resource: 'Convert a webpage URL into clean, AI-friendly markdown' via a live HTTP GET, then explains the transformation (stripping ads, navigation, scripts). It also explicitly differentiates this tool from its siblings, saying no other tool here does markdown conversion and that get_token_dump_risk is unrelated.
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 when-to-use guidance: read a webpage's content, avoid wasting tokens on HTML/ads/navigation, and call it before summarizing or answering questions about arbitrary public URLs. It also lists explicit exclusions: authenticated URLs, non-HTML resources, and JavaScript-rendered SPAs, and names the sibling tool it is not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
derivatives.funding_apr_matrixAInspect
Annualize a perpetual funding rate into APR + carry-trade breakeven days:
evaluates a spot+perpetual cash-and-carry trade, tells you which side
collects funding, and how many days of income recoups round-trip costs.
Pure calculation layer on top of get_funding_rate - no extra upstream call,
so prefer this over get_funding_rate whenever you need the APR/breakeven
view rather than the raw rate.
Use this to evaluate a spot+perpetual carry trade. Does NOT account for
margin borrow cost, spot-perp basis risk, or perp liquidation risk - treat
breakeven_days as a rough estimate, not a guaranteed profit timeline.
Args:
symbol: e.g. "BTC", "ETH", or "BTCUSDT".
assumed_round_trip_cost_pct: Combined entry+exit trading fee % across
both legs (default 0.2). Pass your own fee tier for accuracy.
Returns:
On success: {"success": true, "apr_pct", "collects_funding_side",
"breakeven_days", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| assumed_round_trip_cost_pct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it delivers: it discloses this is a 'pure calculation layer' with 'no extra upstream call' (implying fast, non-mutating), lists excluded cost/risk factors, and warns that breakeven_days is 'a rough estimate, not a guaranteed profit timeline.' The only minor gap is a slight ambiguity in 'on top of get_funding_rate - no extra upstream call' that never fully clarifies whether the rate is fetched internally.
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 structure is well front-loaded: purpose first, routing second, limitations third, then Args/Returns. Nearly every sentence earns its place, but there is minor redundancy — 'evaluates a spot+perpetual cash-and-carry trade' (paragraph 1) and 'Use this to evaluate a spot+perpetual carry trade' (paragraph 3) restate the same idea.
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 there is no output schema and no annotations, the description covers all bases: purpose, sibling routing, limitations, parameter semantics, and an explicit success/failure return contract ('apr_pct', 'collects_funding_side', 'breakeven_days' vs. 'error': {'type', 'message'}). Nothing an agent needs to call this tool 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 0%, so the description fully compensates. symbol gets concrete format examples ('BTC', 'ETH', 'BTCUSDT'), and assumed_round_trip_cost_pct gets a precise definition ('combined entry+exit trading fee % across both legs') plus actionable guidance to 'pass your own fee tier for accuracy.' An agent can determine correct values for both parameters without opening 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 opens with a specific verb+resource: 'Annualize a perpetual funding rate into APR + carry-trade breakeven days,' and concretely states what it computes (which side collects funding, how many days recoup round-trip costs). It also differentiates from the sibling derivatives.funding_rate by positioning itself as the APR/breakeven view rather than the raw-rate view.
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 guidance is given: 'prefer this over get_funding_rate whenever you need the APR/breakeven view rather than the raw rate,' and it names the exact use case ('Use this to evaluate a spot+perpetual carry trade'). It also states what the tool does NOT cover (margin borrow cost, basis risk, liquidation risk), giving the agent clear when-not-to-trust conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
derivatives.funding_rateAInspect
Get perpetual futures funding rate (Bybit primary, Binance fallback) to
gauge long/short crowding before entering or hedging a position.
Use this when asked about funding rate levels or funding-rate arbitrage/carry
trade opportunities. If you also need the trade annualized into an APR with
a carry-trade breakeven-days estimate, use get_funding_apr_matrix instead -
it already calls this internally, so calling both is redundant. Check the
data_source field to see whether Bybit or the Binance fallback answered;
predicted_rate equals funding_rate because neither exchange exposes a
separate forecast field (not a bug). Also returns mark_price/index_price
(populated on both the Bybit and Binance paths) and open_interest_usd
(Bybit path only - always null on the Binance fallback, since Binance's
premiumIndex endpoint doesn't report open interest).
Args:
symbol: e.g. "BTC", "ETH", or "BTCUSDT" (non-USDT symbols are
normalized to USDT pairs).
Returns:
On success: {"success": true, "funding_rate_percentage",
"funding_interval_hours", "mark_price", "index_price",
"open_interest_usd", "data_source", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses the Bybit-first/Binance-fallback data_source behavior, explains that predicted_rate equals funding_rate is not a bug, and documents when open_interest_usd is always null. These are exactly the behavioral quirks an agent needs before trusting the result.
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 purpose and usage guidance are front-loaded, and each subsequent sentence adds a distinct piece of behavior or return-field context. The Args and Returns sections organize technical detail cleanly, 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?
With no output schema, the description enumerates the success fields, the failure structure, per-data-source field availability, and the key fallback caveat. For a one-parameter read tool with complex sourcing behavior, this is a complete invocation contract.
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%, but the description fully compensates for the sole symbol parameter by giving concrete examples ('BTC', 'ETH', 'BTCUSDT') and the normalization rule for non-USDT symbols. This leaves no ambiguity about what to pass.
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 opens with a specific verb and resource: 'Get perpetual futures funding rate', names the primary and fallback sources, and gives an intended use case. It also explicitly differentiates this tool from get_funding_apr_matrix, so an agent can distinguish them immediately.
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 states exactly when to use this tool ('when asked about funding rate levels or funding-rate arbitrage/carry trade opportunities') and names the alternative with an explicit exclusion: use get_funding_apr_matrix instead when APR/breakeven is needed, since calling both is redundant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
derivatives.whale_position_auditAInspect
Audit a Hyperliquid wallet's open perpetual futures positions: side,
size, leverage, max_leverage, unrealized PnL, return_on_equity_pct,
liquidation price, and distance-to-liquidation percentage for every open
position (max_leverage and return_on_equity_pct are Hyperliquid's own
reported fields, not derived by this tool).
Use this only when you already have a specific Hyperliquid/EVM wallet address
(from an explorer, a screenshot, on-chain sleuthing, etc.) and want to audit
its current exposure. Do NOT use it to discover or rank "smart money" wallets
- Hyperliquid's public API has no leaderboard or large-trader disclosure
endpoint, so this tool cannot identify addresses for you, only audit ones you
provide. risk_flags (HIGH_LEVERAGE, NEAR_LIQUIDATION) are fixed numeric
thresholds, never a qualitative judgment.
Args:
address: Hyperliquid/EVM wallet address to audit (0x...).
Returns:
On success: {"success": true, "positions": [...], "risk_flags", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and it provides meaningful caveats: max_leverage and return_on_equity_pct are Hyperliquid-reported fields, risk_flags are fixed numeric thresholds, and the tool cannot identify addresses. It also documents success/failure return shapes, though it does not explicitly state read-only 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?
The description is slightly long but well organized: purpose, usage boundaries, caveats, args, and returns are separated. Every section adds operational value, and the core purpose is front-loaded in the first sentence.
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 tool with no output schema, the description is complete: it lists all position fields, return success/failure shapes, risk-flag semantics, and the address-selection context. Nothing an agent needs 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 coverage is 0% for the single required parameter, but the description compensates by defining it as a 'Hyperliquid/EVM wallet address to audit (0x...)' and adding source context (explorer, screenshot, on-chain sleuthing). This is sufficient for a single simple parameter, though no address validation rules are given.
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 ('Audit a Hyperliquid wallet's open perpetual futures positions') and enumerates the exact fields returned. It also explicitly distinguishes what the tool is not for ('Do NOT use it to discover or rank smart-money wallets'), preventing confusion with sibling analysis 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?
It gives an explicit precondition ('Use this only when you already have a specific Hyperliquid/EVM wallet address') and an explicit exclusion ('Do NOT use it to discover or rank smart money wallets'). This lets an agent decide between this and address-discovery/screening siblings without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dex.liquidity_slippageAInspect
Estimate DEX pool liquidity and trade slippage (GeckoTerminal): total USD
liquidity, 24h volume, an estimated slippage percentage for the given
trade size, and slippage_tiers at fixed $1k/$5k/$10k sizes. Approximated
under a documented constant-product (50:50) assumption since GeckoTerminal's
free API exposes only combined USD liquidity, not per-token reserves.
Also returns quote_token_is_stablecoin (false/null means this pool isn't
USD-quoted - an extra hop is needed to reach USD, not accounted for here),
pool_fee_pct (the pool's swap fee tier, disclosed for reference only - not
subtracted from the slippage estimate), and assumed_gas_cost_usd (a flat
per-network estimate, not a live quote).
Use this before sizing a trade or comparing pools for a given token, to
check depth before swapping. Do NOT treat estimated_slippage_pct or
slippage_tiers as an exact on-chain quote, especially for concentrated-
liquidity or stableswap pools - always re-verify with a live quote before
executing. Requires exactly one of pool_address or token_address; passing
neither raises an "invalid_input" error.
Args:
trade_size_usd: Hypothetical trade size in USD.
network: GeckoTerminal network id, e.g. "base", "eth" (default "base").
pool_address: A specific pool contract address.
token_address: Token contract address (auto-picks the most liquid pool).
One of pool_address or token_address is required.
Returns:
On success: {"success": true, "total_liquidity_usd",
"estimated_slippage_pct", "slippage_tiers", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | base | |
| pool_address | No | ||
| token_address | No | ||
| trade_size_usd | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses the constant-product 50:50 assumption, the extra-hop limitation when quote_token_is_stablecoin is false/null, that pool_fee_pct is not subtracted, that gas cost is a flat per-network estimate, and that passing neither address triggers an 'invalid_input' error.
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 long but every section earns its place: the core function, data-source assumptions, caveats, parameter semantics, and return shapes. It is front-loaded and logically organized, 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 tool with no output schema and no annotations, the description is remarkably complete. It documents both success and failure return shapes, all caveats about approximation, the dual addressing modes, and the meaning of each returned field. An agent can invoke this tool correctly and interpret its results without further 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 0%, so the description must compensate, and it does. The Args section explains trade_size_usd as a hypothetical USD size, network with examples and default, pool_address as a specific contract, and token_address as auto-picking the most liquid pool. It also clarifies the exactly-one-of requirement.
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 opens with a specific verb and resource: 'Estimate DEX pool liquidity and trade slippage (GeckoTerminal)' and enumerates the concrete outputs. It is clearly distinct from all sibling tools, which target different domains like token risk, derivatives, arbitrage, or macro events.
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 explicit guidance: 'Use this before sizing a trade or comparing pools for a given token, to check depth before swapping.' It also states what not to do: 'Do NOT treat estimated_slippage_pct or slippage_tiers as an exact on-chain quote... always re-verify with a live quote before executing.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_dump_riskAInspect
Calculate a token's vesting/unlock D-Day, unlock ratio relative to
circulating supply, and a sell-pressure score against real-time volume,
returned as a concise summary report.
Use this to evaluate token unlock/vesting supply overhang risk before
taking mid-to-long term positions. Default data source (on-chain Sablier
vesting, the current configuration - no DropsTab key set) does NOT classify
VC/team vs. other holders and does NOT provide exact unlock timing
(days_until_unlock stays null) - it only reports the currently-locked
supply ratio; treat a null value as "unknown," never as "no risk." On this
on-chain path it also reports vesting_deposit_amount/vesting_withdrawn_amount
(Sablier's own depositAmount/withdrawnAmount, aggregated across streams) and
vesting_progress_pct (withdrawn/deposit * 100) showing how far along the
vesting schedule already is - null when deposit data wasn't available. Do
NOT use it for intra-day slippage or real-time transaction simulation - use
dex.liquidity_slippage for that instead. This tool is free (no payment) as
an onboarding check; every other tool here is a normal read-only call
against app/logic.py.
Args:
symbol: Token ticker symbol (e.g. "ATH", "AO", "CPOOL"). Case-insensitive.
Returns:
Success & data available: {"success": true, "available": true, "symbol",
"unlock_date_utc", "days_until_unlock", "unlock_supply_pct",
"vesting_progress_pct", "volume_impact_pct", "sell_pressure_risk_level", ...}
Success but not yet available:
{"success": true, "available": false, "reason", "message"}
(e.g. the paid data source isn't connected yet, by business decision)
Failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It comprehensively discloses that the default on-chain Sablier source does not classify holders, does not provide exact unlock timing (days_until_unlock stays null), and explains the interpretation of null as 'unknown' not 'no risk'. It also details additional fields (vesting_deposit_amount, vesting_withdrawn_amount, vesting_progress_pct) and their null behavior, as well as the free/read-only nature. This far exceeds typical behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place. It is front-loaded with the purpose, then logically structured into usage guidance, caveats, args, and returns. Despite its length, there is no redundancy; all details are necessary given the lack of annotations and output schema. The structure aids scanning, and the critical caveats are clearly highlighted.
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 complexity (multiple return shapes, data source limitations, null handling) and the absence of an output schema and annotations, the description is exceptionally complete. It covers success with data, success but unavailable, and failure cases, explains edge cases (null days_until_unlock, vesting_progress_pct null), and provides enough context for an agent to correctly interpret results. 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?
Schema description coverage is 0%, so the description must compensate. It does so effectively with a dedicated Args section: 'symbol: Token ticker symbol (e.g. "ATH", "AO", "CPOOL"). Case-insensitive.' This adds meaning beyond the raw schema (type: string) by providing examples and case-insensitivity, fully covering the only parameter.
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 tool's specific function: calculating vesting/unlock D-Day, unlock ratio, and sell-pressure score against volume. It uses precise verbs and resources, and explicitly differentiates from siblings by referencing dex.liquidity_slippage as the alternative for intra-day slippage, making its unique purpose unmistakable.
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 (evaluating token unlock/vesting supply overhang risk before mid-to-long term positions) and when not to use it (not for intra-day slippage or real-time simulation), pointing to the specific alternative tool. It also clarifies the default data source limitations and the meaning of null values, leaving no ambiguity about appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market.cycle_compareAInspect
BTC/ETH's own USD price position vs the same day-offset in the 2016 and
2020 halving cycles, plus today's real BTC dominance. NOT a historical
dominance comparison (no free data source exists for that - see the
response's notice field). Derived from a cache refreshed once daily (see
scripts/collect_btc_cycle_metrics.py), so prices can be up to ~24h stale.
No input params.
Returns:
On success: {"success": true, "btc", "eth", "btc_dominance_pct_today",
"dxy_level", "us10y_yield_pct", "days_since_halving", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that values come from a cache refreshed once daily and can be up to ~24h stale, names the collection script, and describes both success and failure response shapes. It stops short of stating read-only status or any auth/quota expectations, which is a minor residual 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?
Front-loaded with the core comparison, then caveats, then return shape. The script filename and enumerated return keys are slightly more detail than an agent strictly needs, but 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?
No output schema exists, so the description's return-value and error-shape summary is necessary and present, and the staleness caveat plus the notice-field pointer preempt the most likely misuse. Complete for a zero-argument 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?
Zero parameters, so the baseline is 4; the description confirms 'No input params' and therefore nothing is left ambiguous about invocation. No further parameter meaning is needed.
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 computation: BTC/ETH USD price position vs the same day-offset in the 2016 and 2020 halving cycles, plus today's real BTC dominance. The scope is narrow and distinctive enough to separate it from the prediction, derivatives, and DEX 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 rules out the wrong interpretation ('NOT a historical dominance comparison') and points at the response's notice field for that gap. It lacks a positive 'use this when...' framing or a named alternative, but the exclusion does real routing work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market.kimchi_alertAInspect
Detect Korea-vs-global crypto price arbitrage (the "kimchi premium"):
whether a coin trades at a premium or discount on Upbit vs a global
reference price (Coinbase spot, CoinGecko fallback - NOT a live Binance
orderbook, despite the legacy binance_price_usdt field name kept for
backward compatibility), a reverse-premium crash-risk flag (-1.5% or
below), and a premium-surge flag (+3 percentage points within the last
hour).
Use this when asked about cross-exchange arbitrage opportunities in Korean
crypto markets, to detect a reverse-premium crash risk, or a sudden premium
surge. This is a live snapshot only - do NOT use it for historical/backtesting
data, or for non-Korean-exchange comparisons (use arb.spread_matrix for a
general CEX-DEX spread check instead).
Args:
symbol: Ticker symbol, e.g. "BTC", "ETH", "SOL" (default "BTC").
Returns:
On success: {"success": true, "symbol", "upbit_price_krw",
"binance_price_usdt" (legacy name, actually Coinbase/CoinGecko),
"cex_reference_price_usdt" (same value, honest name),
"cex_price_source", "kimchi_premium_pct", "premium_change_1h_pct",
"alerts", "thresholds", "notice", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | BTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and handles it thoroughly. It reveals that the tool is a 'live snapshot only', that binance_price_usdt is a legacy name actually backed by Coinbase/CoinGecko and 'NOT a live Binance orderbook', and discloses the exact thresholds for the crash-risk and surge flags. It also documents the success/failure return shapes, including the error 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?
The description is organized into clear sections: what it does, when to use/not use, args, and returns. Every sentence carries necessary information, including the critical caveat about the legacy field name and the fallback reference source. There is no fluff or repeated schema content.
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 fully documents the return payload by listing success fields (including the honest cex_reference_price_usdt alias), the failure error structure, and the alert thresholds. Combined with the single well-explained parameter, nothing an agent needs to invoke it correctly or interpret results 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 0%, so the description must compensate, and it does: 'symbol: Ticker symbol, e.g. BTC, ETH, SOL (default BTC)'. This adds semantic meaning beyond the raw schema field and gives concrete examples. The single parameter is fully explained for an agent.
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 opens with a specific verb and resource: 'Detect Korea-vs-global crypto price arbitrage (the kimchi premium)' and explains the Upbit-vs-global-reference comparison, including the two flags. It explicitly names arb.spread_matrix as the tool for non-Korean comparisons, distinguishing itself from the sibling set. This is purpose clarity at the highest level.
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 states 'Use this when asked about cross-exchange arbitrage opportunities in Korean crypto markets' and gives explicit when-not-to-use cases: 'do NOT use it for historical/backtesting data, or for non-Korean-exchange comparisons'. It names the alternative tool (arb.spread_matrix) for the general CEX-DEX spread check. This is fully explicit when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market.oracle_gapAInspect
Single-snapshot gap between Hyperliquid's mid price and its mark/oracle
prices for one perpetual - the exact failure mode behind the 2026-10-10
Papertrade incident on HyperEVM, where a protocol priced off Hyperliquid's
raw mid instead of mark/oracle and an attacker moved ~$2.31B notional on
Hyperliquid itself to swing the mid ~12bp, netting ~$1.28M from Papertrade.
Returns mid_oracle_gap_bp and mark_oracle_gap_bp in basis points, plus an
`elevated` flag.
`elevated` is a fixed-threshold boolean (abs(mid_oracle_gap_bp) >=
alert_threshold_bp), NOT a manipulation determination - it only says the
gap is currently wide, not why. This is a single point-in-time snapshot
with no trade-flow or volume data (Hyperliquid's public API does not
expose per-market volume), so it cannot by itself distinguish organic
volatility from an attempted price push. Always check the response's
`notice` field.
Args:
coin: Hyperliquid perpetual ticker, e.g. "ETH" or "BTC".
Returns:
On success: {"success": true, "coin", "mid_price", "mark_price",
"oracle_price", "mid_oracle_gap_bp", "mark_oracle_gap_bp",
"elevated", "alert_threshold_bp", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so richly: it defines `elevated` as a fixed-threshold boolean, not a manipulation verdict, discloses the single-point-in-time limitation, notes the absence of volume data from the public API, and instructs the agent to always check the response's `notice` field. This is unusually candid behavioral disclosure.
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 and return values are front-loaded, and the Args/Returns structure is clean. The 2026 Papertrade incident narrative is long but earns its place by motivating why the tool exists and what the `elevated` flag does not mean; a sentence or two of the backdrop could be trimmed.
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 snapshot tool with no output schema or annotations, the description documents the return shape (success/failure variants and field list), the caveats, and the interpretation of the computed flag. An agent has everything needed to call it correctly and read the result responsibly.
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 schema itself only has an untyped 'Coin' string. The description compensates by defining `coin` as a 'Hyperliquid perpetual ticker, e.g. "ETH" or "BTC"', which is exactly the format guidance the schema omits. An enum would have been better, but the description meaningfully fills the gap for the single parameter.
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 states a precise verb+resource+scope: a single-snapshot comparison of Hyperliquid's mid versus mark/oracle price for one perpetual. It names the exact output fields (mid_oracle_gap_bp, mark_oracle_gap_bp) and is trivially distinguishable from siblings like derivatives.funding_rate or dex.liquidity_slippage.
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 frames the use case (detecting the mid-vs-oracle divergence failure mode) and explicitly states what it is NOT — 'cannot by itself distinguish organic volatility from an attempted price push' — which is strong negative guidance. It doesn't name a specific sibling tool to use instead for trade-flow or manipulation confirmation, so it stops 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.
prediction.exit_capacity_auditAInspect
Walk a single Polymarket outcome's live order book to determine how much
of a given position size can actually be filled right now, at what
average price, and with how much price impact versus the best quote - a
live, point-in-time snapshot, not historical/average liquidity. Also
returns book_snapshot_time (the book's own reported snapshot timestamp)
and Polymarket's own tick_size/min_order_size for this market (null if the
book response didn't include them).
Use this to validate one leg of an opportunity found by
prediction.neg_risk_arbitrage before committing capital, or whenever you
need real executable liquidity rather than the headline best bid/ask. Do
NOT use for multi-outcome basket arbitrage detection (use
prediction.neg_risk_arbitrage instead). market_slug only resolves an
EXACT Polymarket market slug - no fuzzy keyword search, since a wrong
silent match would be worse than an error here.
Args:
position_size_shares: Number of outcome shares to sell (or buy). Must
be positive.
token_id: The outcome's CLOB token_id / asset_id, if already known.
Provide either this OR market_slug.
market_slug: Exact Polymarket market slug, used to resolve token_id
automatically when not already known.
outcome: "yes" (default) or "no" - which side to resolve when using
market_slug. Ignored if token_id is given directly.
side: "sell" (default) to audit exiting a position against the bid
side, or "buy" to audit entering against the ask side.
Returns:
On success: {"success": true, "executable", "best_quote",
"avg_exit_price", "price_impact_pct", "max_executable_shares", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | sell | |
| outcome | No | yes | |
| token_id | No | ||
| market_slug | No | ||
| position_size_shares | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so thoroughly. It states this is a live point-in-time snapshot, not historical/average liquidity, explains returned metadata like book_snapshot_time and tick_size, and documents the success/failure response envelope. It also notes that missing book fields return null, setting expectations for edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but stays tightly organized with a purpose summary, usage guidance, parameter list, and return-shape note. Every sentence carries necessary information, and the most decision-relevant constraints (live snapshot, single outcome, exact slug) are front-loaded.
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 moderate complexity, no annotations, and no output schema, the description is complete. It covers what the tool does, when to use it, what each argument means, and what success and failure look like, including the key computed fields. An agent has enough information to call it correctly and interpret 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 input schema provides type/default/required info only, with 0% semantic coverage, so the description must explain each parameter. It does: position_size_shares must be positive, token_id and market_slug are alternatives, outcome defaults to 'yes' and is ignored when token_id is provided, and side maps sell to bid and buy to ask. This fully compensates for the schema gaps.
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 opens with a specific verb ('Walk') and resource ('a single Polymarket outcome's live order book') and clearly states the computed outputs: executable size, average price, price impact. It also distinguishes itself from prediction.neg_risk_arbitrage by explicitly scoping to a single leg rather than multi-outcome basket arbitrage.
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 guidance is explicit: validate one leg of an opportunity from prediction.neg_risk_arbitrage, or whenever real executable liquidity is needed. It also gives a clear exclusion: do NOT use for multi-outcome basket arbitrage, directing the agent to prediction.neg_risk_arbitrage instead. The exact-slug warning further clarifies when it is appropriate to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction.hip4_price_ladderAInspect
One underlying's Hyperliquid HIP-4 "above $X" price-binary markets laid
out as a strike-sorted ladder, each rung with its live Yes probability -
e.g. to read the market's implied BTC price distribution at a glance.
Reuses the same cached data as prediction.hip4_snapshot - no new upstream
call. No volume field: Hyperliquid's public API does not expose
per-outcome trading volume for HIP-4 markets.
Do NOT use for mutually-exclusive multi-outcome groups (use
prediction.hip4_snapshot's grouped_questions instead) or for Polymarket
data. Always check the response's `notice` field - same
reverse-engineered-mapping caveat as prediction.hip4_snapshot.
Args:
underlying: Asset symbol for crypto price-binary markets (e.g. "BTC",
"ETH", "SOL", "HYPE").
limit: Max rungs returned. Defaults to 100, max 500.
Returns:
On success: {"success": true, "underlying", "rung_count",
"skipped_unparsable_count", "rungs", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| underlying | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that data is cached and reuses the hip4_snapshot upstream call, that no volume field exists because the API doesn't expose it, and that a reverse-engineered-mapping caveat lives in `notice`. It omits auth/permission needs and any rate-limit or freshness guarantees, but the read-only nature is implicit and the disclosed caveats 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?
Front-loaded with the core purpose, then clearly sectioned into caveats, exclusions, Args and Returns. Every sentence is informative, though the volume-field note and the repeated reference to hip4_snapshot add 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?
No output schema exists, yet the description supplies the success and failure response shapes (rung_count, skipped_unparsable_count, error object) plus the caveat field. Combined with the param docs and exclusions, an agent has everything needed to call and interpret this 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 0%, so the description must compensate and does: `underlying` is explained as an asset symbol with concrete examples (BTC, ETH, SOL, HYPE), and `limit` is described as max rungs with a default of 100 and a hard cap of 500 — the 500 cap is not in the schema 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?
States a specific verb+resource: Hyperliquid HIP-4 'above $X' price-binary markets for one underlying, laid out as a strike-sorted ladder with live Yes probabilities. It explicitly distinguishes itself from prediction.hip4_snapshot and Polymarket data, so an agent can route correctly 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 an explicit negative case ('Do NOT use for mutually-exclusive multi-outcome groups') and names the alternative (prediction.hip4_snapshot's grouped_questions). It also rules out Polymarket use and points the agent at the `notice` field, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction.hip4_snapshotAInspect
Real-time probability snapshot of Hyperliquid's HIP-4 outcome (prediction)
markets - crypto price binaries, sports game winners, tournament winners,
Fed rate decisions, and any other market type Hyperliquid adds, all in one
call. No curated market list: every field under "fields" on each row is
parsed verbatim from Hyperliquid's own "key:value|key2:value2" description
string, so new HIP-4 market types appear automatically without any code
change here. standalone_markets covers two-sided markets (most crypto/
sports games); grouped_questions covers mutually-exclusive multi-outcome
groups (e.g. a league winner) with a fallback price for "none of the
above".
Do NOT use for Polymarket data (use prediction.neg_risk_arbitrage /
prediction.exit_capacity_audit instead). No wallet or API key needed
upstream - always check the response's `notice` field, since the mapping
used to join Hyperliquid's market metadata to its live prices is not
documented by Hyperliquid and was reverse-engineered from live data.
Args:
template: Optional substring filter on the market's template name
(e.g. "sportsContestWinner", "priceBinary").
underlying: Optional asset symbol filter for crypto markets (e.g.
"BTC", "ETH", "SOL", "HYPE").
limit: Max rows per list (standalone_markets / grouped_questions
each). Defaults to 100, max 500.
Returns:
On success: {"success": true, "standalone_markets", "grouped_questions",
"standalone_count", "grouped_question_count", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| template | No | ||
| underlying | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that fields are parsed verbatim from Hyperliquid's own description string, that new market types appear without code changes, the standalone_markets vs grouped_questions semantics including the 'none of the above' fallback, and the critical caveat that the metadata-to-price join is undocumented and reverse-engineered. That reverse-engineering warning is a genuine reliability signal an agent needs.
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 and front-loaded: purpose first, then the exclusions and caveats, then args, then returns. It is longer than strictly necessary and the market-type enumeration in the opening sentence could be trimmed, but almost every clause carries operational value.
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-param, no-output-schema tool, the definition covers purpose, exclusions, parameter meanings, return shape (success/error and the standalone_markets/grouped_questions/count keys), and the reliability caveat. Nothing an agent needs 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 0%, so the description must compensate entirely, and it does: template is defined as a substring filter on the template name with example values, underlying as an asset symbol filter with examples (BTC/ETH/SOL/HYPE), and limit as rows per list with default 100 and max 500. All three parameters gain meaning unavailable in the bare 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 ('real-time probability snapshot of Hyperliquid's HIP-4 outcome markets') and enumerates the market types covered. It explicitly distinguishes itself from the Polymarket siblings, 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?
Explicit exclusions are given ('Do NOT use for Polymarket data (use prediction.neg_risk_arbitrage / prediction.exit_capacity_audit instead)'), plus the note that no wallet or API key is needed and that the response `notice` field must always be checked. This is exactly the when/when-not/alternatives guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction.neg_risk_arbitrageAInspect
Detect basket arbitrage in a Polymarket neg-risk (mutually-exclusive,
multi-outcome) event: a full YES basket across all outcomes always settles
to exactly $1 via Polymarket's neg-risk adapter, so a basket price away
from $1 (after costs) is a near risk-free edge. Also computes
buy/sell_basket_capacity_shares - the actual liquidity-bottleneck size the
thinnest outcome's order book can support within max_slippage_pct - so
this isn't just a top-of-book mirage. Note *_capacity_notional_usd still
prices that size at top-of-book (optimistic beyond the first price level) -
use *_capacity_vwap_notional_usd for the realistic average fill cost. Also
returns oldest_book_snapshot_time, the staleness bottleneck across all legs
(the oldest of each leg's own order-book snapshot timestamp). Polymarket only.
Use this to scan a specific multi-outcome event you already know the slug
for. Do NOT use for binary Yes/No markets (no basket to arbitrage, this
needs 2+ mutually-exclusive outcomes) or for Kalshi (its Data ToS forbids
this use of their data). Pair with prediction.exit_capacity_audit before
sizing a real position on one leg.
Args:
event_slug: Polymarket event slug, from the event's URL on polymarket.com.
assumed_round_trip_cost_pct: Gas + fees + slippage buffer, as a
percentage of $1 basket notional (default 1.5).
max_slippage_pct: How far past each leg's best price to walk the book
when sizing executable basket capacity (default 1.0).
min_net_edge_pct: Minimum net edge (%) required to flag
arbitrage_viable: true (default 1.0).
Returns:
On success: {"success": true, "basket_ask_sum", "basket_bid_sum",
"buy_basket_net_edge_usd", "buy_basket_capacity_shares",
"opportunity", "arbitrage_viable", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| event_slug | Yes | ||
| max_slippage_pct | No | ||
| min_net_edge_pct | No | ||
| assumed_round_trip_cost_pct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and meets it thoroughly. It explains the core mechanism (basket settles to $1), the capacity computation tied to max_slippage_pct, the caveat that notional capacity is optimistic while VWAP capacity is realistic, and the staleness field. It even documents the success and failure return shapes, so the agent knows what to expect.
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?
Although the description is longer than average, every sentence adds operational value: core concept, capacity caveat, staleness explanation, usage boundaries, parameter semantics, and return format. The structure is front-loaded with the main purpose, followed by caveats and usage, then args and returns. No filler or redundant restatement of the tool name exists.
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 no output schema, no annotations, and 0% schema description coverage, this description is unusually complete. It covers what the tool computes, the key output fields, failure behavior, platform restrictions, and parameter meanings. The only minor omission is potential authentication or rate-limit considerations, but these are not essential for a read-only detection tool and are not expected from sibling 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 0%, so the description must fully compensate, and it does. Each parameter gets a meaningful explanation: event_slug is sourced from the Polymarket URL, assumed_round_trip_cost_pct is defined as a percentage of $1 basket notional, max_slippage_pct controls how far to walk the book, and min_net_edge_pct gates arbitrage_viable. This goes well beyond the bare schema property names.
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 opens with a specific verb and resource: 'Detect basket arbitrage in a Polymarket neg-risk event.' It clearly distinguishes itself from siblings by naming what it is not for (binary markets, Kalshi) and by referencing the companion tool prediction.exit_capacity_audit. An agent can immediately understand exactly what this tool does and how it differs from related prediction and arbitrage 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?
Explicit when-to-use guidance is present: 'Use this to scan a specific multi-outcome event you already know the slug for.' It also gives concrete exclusions ('Do NOT use for binary Yes/No markets... or for Kalshi') and even provides a workflow recommendation to pair with prediction.exit_capacity_audit before sizing a position. This leaves no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security.contract_health_auditAInspect
Audit LP lock/burn status for a token contract (GoPlus): lp_locked_pct,
lp_burned_pct, top_unlocked_holder_pct (largest single non-locked holder)
and top5_unlocked_holder_pct (top 5 non-locked holders summed, catches
multi-wallet concentration the single-holder field misses), rolled up
into a liquidity_health category (LOCKED / PARTIALLY_LOCKED / UNLOCKED /
NO_LP_DATA). A key rug-pull signal that get_token_risk does not cover.
Use this to check whether a token's liquidity is locked, burned, or freely
held by a single wallet before trusting it - complements, not replaces,
get_token_risk (honeypot/tax/mint checks). Deliberately does NOT include any
qualitative "suspicious transaction" judgment, only GoPlus's own numbers, and
has no fallback if GoPlus fails (Honeypot.is does not expose LP lock data).
Args:
chain_id: EVM chain id, e.g. 8453 for Base.
contract_address: Token contract address (0x...).
Returns:
On success: {"success": true, "lp_locked_pct", "lp_burned_pct",
"liquidity_health", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | ||
| contract_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it names the upstream source (GoPlus), discloses the deliberate scope exclusion (no qualitative 'suspicious transaction' judgment), and warns there is no fallback when GoPlus fails. It stops short of stating auth/permission requirements or rate limits, but for a read-only audit the gaps are minor.
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?
Well front-loaded: purpose and the sibling differentiation come first, with Args/Returns clearly sectioned. The parenthetical explaining why top5 catches multi-wallet concentration is slightly verbose but justifies its place by clarifying a non-obvious field.
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 no output schema, the description documents both the success shape (field names plus the liquidity_health category values) and the failure shape (error.type/message). An agent has everything needed to call it and interpret 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 compensate fully – and it does, documenting both required params with format hints ('EVM chain id, e.g. 8453 for Base' and 'Token contract address (0x...)'). This is meaning genuinely absent from the bare 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?
Opens with a specific verb+resource ('Audit LP lock/burn status for a token contract') and enumerates the exact fields it returns. It explicitly positions itself against get_token_risk, so an agent can distinguish it from security.token_risk and security.token_diagnostic 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?
States exactly when to use it ('check whether a token's liquidity is locked, burned, or freely held by a single wallet before trusting it') and how it relates to the alternative ('complements, not replaces, get_token_risk'). It even names the trigger condition for the sibling (honeypot/tax/mint checks), which is textbook routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security.token_diagnosticAInspect
Bundles get_token_risk + get_contract_health_audit into one combined
diagnostic report (same GoPlus data, run in parallel, one upstream round
trip), plus a deduped union of risk_flags. Does not compute a composite
score/grade - every field is copied unchanged from the two underlying tools.
Use this right before buying or swapping an unfamiliar token when you want
both honeypot/tax risk AND LP lock/burn status in one call, instead of
calling get_token_risk and get_contract_health_audit separately. Do NOT
use it if you only need one of the two - call that single tool directly
to save a round trip. Does not cover token unlock/vesting risk - use
get_token_dump_risk separately for that.
Args:
chain_id: EVM chain id, e.g. 8453 for Base.
contract_address: Token contract address (0x...).
Returns:
On success: {"success": true, ...combined token_risk + contract_health_audit fields}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | ||
| contract_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral context: it explains parallel execution, one upstream round trip, deduped union of risk_flags, unchanged field copying, and gives a precise success/failure return structure. This is thorough and leaves no major behavioral surprise undisclosed.
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 well-structured: purpose and usage are front-loaded, followed by args and returns in clear labeled sections. Every sentence contributes meaningful information, and there is no redundancy or 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?
Despite no annotations and no output schema, the description covers the tool's composition, limitations, usage boundaries, parameter semantics, and return format. An agent has enough context to decide whether to use this tool and to understand what will happen.
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. It does so by providing a type, example, and format for chain_id ('EVM chain id, e.g. 8453 for Base') and contract_address ('Token contract address (0x...)'). This is sufficient for these two straightforward parameters, though slightly more detail could be added.
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 ('Bundles get_token_risk + get_contract_health_audit into one combined diagnostic report') and explicitly names the underlying tools, distinguishing this from its siblings. It also clarifies what it does not do (no composite score/grade), making the tool's role 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 explicit when-to-use guidance ('Use this right before buying or swapping an unfamiliar token'), when-not-to-use guidance ('Do NOT use it if you only need one of the two'), and names the exact alternative tools to call instead. It even routes vesting risk to get_token_dump_risk separately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security.token_riskAInspect
Check a token contract for honeypot/scam risk before buying: is_honeypot,
buy/sell tax, mintability, open-source status, ownership renouncement,
holder count, individual GoPlus risk signals (cannot_buy, cannot_sell_all,
hidden_owner, transfer_pausable, selfdestruct, is_blacklisted,
slippage_modifiable, owner_percent - all feed into risk_flags), is_proxy
and trading_cooldown (informational only, not flagged - both are common in
legitimate contracts), and a summarized risk_level (LOW/MEDIUM/HIGH/UNKNOWN).
Data source: GoPlus Security, falling back to Honeypot.is (the GoPlus-only
fields above are always null on the fallback path).
Use this right before entering a position on an unfamiliar or newly-listed
token. Do NOT treat a null field as "safe" - it means that field could not
be determined; check risk_level and risk_flags instead. This tool does not
cover LP lock/burn status - use get_contract_health_audit for that, or
get_token_diagnostic to get both in one call.
Args:
chain_id: EVM chain id, e.g. 8453 for Base.
contract_address: Token contract address (0x...).
Returns:
On success: {"success": true, "is_honeypot", "buy_tax_pct", "sell_tax_pct",
"risk_level", "risk_flags", ...}
On failure: {"success": false, "error": {"type", "message"}}
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | ||
| contract_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses the GoPlus/Honeypot.is fallback, explains that fallback-only fields are null, warns not to treat null as safe, and identifies which fields are informational vs risk-flagged. It also documents the success/failure return envelope.
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 long because the tool has many output fields, but information is front-loaded and organized into purpose, data source, usage guidance, args, and returns. A few clauses could be tightened, but none are 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?
Given no output schema and no annotations, the description covers everything an agent needs: purpose, when to use, how to interpret nulls, data source fallbacks, limitations/alternatives, argument semantics, and the success/failure return shape. There are no obvious gaps for calling this tool 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 0%, so the Args section must explain the parameters. It correctly describes chain_id as an EVM chain id with a concrete Base/8453 example and contract_address as a 0x... token address. This is sufficient for correct invocation, though it does not go into broader constraints such as supported chain lists or address canonicalization.
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 action ('check a token contract for honeypot/scam risk') on a concrete resource and immediately lists what it evaluates. It also distinguishes itself from adjacent siblings like security.contract_health_audit and security.token_diagnostic by naming what they cover instead.
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 the tool: 'right before entering a position on an unfamiliar or newly-listed token.' It also gives a clear negative condition, noting LP lock/burn status is not covered and directing the agent to get_contract_health_audit or get_token_diagnostic instead.
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.
2 tool updates
v1.5.1- Added
market.cycle_compare - Added
market.oracle_gap
1 tool update
v1.5.0- Added
prediction.hip4_price_ladder
1 tool update
v1.4.0- Added
prediction.hip4_snapshot
2 tool updates
- Added
prediction.exit_capacity_audit - Added
prediction.neg_risk_arbitrage
20 tool updates
v1.0.3- Added
arb.spread_matrix - Added
calendar.macro_dday - Added
derivatives.funding_apr_matrix - Added
derivatives.funding_rate - Added
derivatives.whale_position_audit - Added
dex.liquidity_slippage - Removed
get_arb_spread_matrix - Removed
get_contract_health_audit - Removed
get_dex_liquidity_slippage - Removed
get_funding_apr_matrix - Removed
get_funding_rate - Removed
get_kimchi_alert - Removed
get_macro_dday - Removed
get_token_diagnostic - Removed
get_token_risk - Removed
get_whale_position_audit - Added
market.kimchi_alert - Added
security.contract_health_audit - Added
security.token_diagnostic - Added
security.token_risk
10 tool updates
v1.0.2- Added
get_arb_spread_matrix - Added
get_contract_health_audit - Added
get_dex_liquidity_slippage - Added
get_funding_apr_matrix - Added
get_funding_rate - Added
get_kimchi_alert - Added
get_macro_dday - Added
get_token_diagnostic - Added
get_token_risk - Added
get_whale_position_audit
2 tool updates
v1.0.0- First observed
convert_to_markdown - First observed
get_token_dump_risk
TDQS
Scored across 18 tools
Most tools target distinct actions/resources, with explicit cross-references (e.g., token_risk vs contract_health_audit vs token_diagnostic; funding_rate vs funding_apr_matrix) that help avoid misselection. However, a few overlapping pairs (security.token_diagnostic vs its two component tools; prediction.hip4_snapshot vs price_ladder) require reading descriptions carefully.
Most names are snake_case with domain prefixes, but two tools (convert_to_markdown, get_token_dump_risk) break the namespace pattern, and the verbs/nouns vary (get_…, convert_to_…, noun_phrase). Still readable but not a single predictable convention.
18 tools across many distinct crypto verticals (market, security, derivatives, prediction, DEX, calendar, web) is reasonable, though a couple of convenience wrappers (token_diagnostic, funding_apr_matrix) add slight redundancy. Overall well-scoped for a broad alpha pipeline.
The surface covers many areas but has notable gaps: no generic price/OHLC tool, no discovery mechanism for Polymarket events beyond known slugs, and limited order-book depth outside specific audits. Agents can work around some gaps via convert_to_markdown, but core data coverage is incomplete.
Maintenance
Related MCP Connectors
Pay-per-call DeFi and macro intel for AI agents. x402 USDC tools via streamable HTTP /api/mcp.
Pay-per-call x402 gateway: agent tools, OpenAI-compatible LLM, market data, RPC, security audits.
x402 pay-per-call APIs over MCP, settled in USDC on Base for autonomous agents and developers.
Market data and web intelligence for AI agents, paid per call in USDC on Base via x402.
Related MCP Servers
- AlicenseAqualityCmaintenanceEight crypto and DeFi data tools for AI agents: prices, gas, one ParaSwap route quote, GoPlus token security and top-holder samples, DefiLlama yields, Hyperliquid/dYdX funding, and observed wallet balances. Inspect prices free; pay 0.001–0.008 USDC per call on Base through x402. No API key or subscription.886 npmMIT
- AlicenseAqualityCmaintenanceKorean crypto market data API for AI agents. Real-time Kimchi Premium (Upbit vs Binance), Korean exchange prices, USD/KRW FX rate. First verified Korean market data MCP server. Pay-per-use via x402 on Base.172MIT
- AlicenseCqualityFmaintenanceMCP server bringing 100+ x402-paid APIs to AI agents (Claude, Cursor, MCP-aware clients). Auto-discovers tools from CDP Bazaar; handles USDC micropayments on Base.10035 npm1MIT

Funding-mcpofficial
AlicenseAqualityCmaintenanceReal-time perp market-data for AI trading agents — funding rates, funding-arb signals, open interest, volume, orderbook depth/slippage and oracle families across 25 venues, plus HIP-3 RWA coverage (tokenized stocks, metals, oil) that mainstream aggregators lack. x402-native pay-per-call (USDC on Base): one free funding screener tool + 11 paid tools with auto-pay.1212 npm2MIT