AgentPay x402 — Economic-intelligence layer for AI Agents
AgentPay is an economic-intelligence gateway that lets AI agents call free market/web data tools and budget-capped paid tools via x402 payments, with session tracking and receipts.
Free crypto market data: token prices, market snapshot (S&P, yields, BTC/ETH/gas), market cap/volume, fear & greed index, funding rates, open interest, orderbook depth/slippage, whale activity, DeFi TVL, yield scanner, token security scans, and Dune Analytics queries.
Web/content tools: URL-to-markdown reader, web search with full page content, and crypto news with sentiment.
Wallet lookups: token balances for Ethereum or Stellar addresses.
Paid tools ($0.01 each):
session_createopens a hard budget-capped session;pre_trade_checkreturns an ok/caution/avoid verdict combining slippage, funding, OI crowding, and optional contract security;verified_routevets the x402 marketplace and recommends a trusted, budget-fit provider with a ready-to-pay challenge.Session intelligence: price multi-tool plans before spending, check per-call costs, enforce budgets, allowlists, per-tool limits, and per-call/approval policies, then get a full spending receipt.
Multi-chain settlement: pays in USDC on Base/Stellar or sBTC on Stacks.
Provides capabilities for monitoring Ethereum network activity, including gas price tracking, whale transaction monitoring, and account balance lookups.
Enables AI agents to retrieve and analyze cryptocurrency-related news headlines and sentiment data from Reddit.
Facilitates autonomous agent payments and settlements using USDC on the Stellar network, while providing tools to check Stellar wallet balances.
AgentPay
Most agent-payment tools are a wallet — they move money. AgentPay is the layer that decides whether to spend it at all.
AgentPay is the economic intelligence layer for MCP servers and AI agents.
Agents spend money. Most don't know how much, or why, until the session ends and the bill arrives.
AgentPay gives agents economic intelligence — the ability to reason about cost while they work, not after.
It starts with a budget. Every session opens with a hard cap enforced at the payment layer — not in code a model can ignore, but at the point where money moves. The agent knows from the first call exactly what it has to spend.
Before calling a tool, it knows what that call costs. Mid-task, it can check what's left and route to a cheaper alternative if the math doesn't work. When the session ends, a receipt captures every call, every cost, every decision — not a debug log, but proof of economic accountability.
The developer sees all of it: spending patterns per agent, anomaly flags when something loops or spikes, policy controls that enforce exactly which tools an agent can use and how much it can spend on each.
The result is an agent that doesn't just have a budget. It knows how to use one.
Start free: 20 tools (17 free), no USDC needed, no wallet setup required.
Live gateway: https://agentpay.tools
Settles in: USDC on Base and Stellar, sBTC on Stacks mainnet (walkthrough)
Install
pip install agentpay-x402 # core (Stellar + Stacks/sBTC)
pip install "agentpay-x402[base]" # + pay tools that settle on Base
pip install "agentpay-x402[stacks]" # same as core, spelled out — pay in sBTC on StacksRelated MCP server: CorteX402
Quickstart — 3 lines, zero setup
17 free tools. No USDC, no wallet, no API keys, no human. quickstart() registers
an agent, mints a wallet, and returns a ready, budget-capped session.
from agentpay import quickstart
s = quickstart() # registers + mints a wallet
print(s.call("token_price", {"symbol": "ETH"})["result"]["price_usd"])
print(s.spending_summary()) # receipt: every call, cost, txSet a hard budget, or bring your own funded wallet to pay for tools:
s = quickstart(max_spend="0.50") # cap this run at $0.50
s = quickstart(secret_key="S...", base_key="0x...") # your wallet (Stellar + Base)Every call is session-tracked, and the cap is enforced before any payment is signed.
20 Tools (17 Free + 3 Paid)
Every call is session-tracked — you get a receipt showing every tool called, every cost, and every timestamp.
Tool | Parameters | Returns |
|
| Clean markdown content of any web page |
|
| Top 5 results with full content |
| — | S&P 500, Treasury yield, BTC, ETH, gas in one call |
|
| price_usd, change_24h_pct, market_cap_usd |
| — | slow/standard/fast gwei, base_fee_gwei |
|
| value 0–100, value_classification, history[] |
|
| volume_24h_usd, market_cap_usd, price_usd |
|
| token balances |
|
| large_transfers[] with direction, total_volume_usd |
|
| tvl, change_1d, change_7d, chains[] |
|
| risk_level, is_honeypot, buy_tax, sell_tax |
|
| total_oi_usd, oi_change_1h/24h_pct, long_short_ratio |
|
| best_bid/ask, spread_pct, slippage at $10k/$50k/$250k |
|
| funding_rate_pct, annualized_rate_pct, sentiment per exchange |
|
| headlines[] with title, url, sentiment, score |
|
| top 10 pools by APY with protocol, tvl_usd, risk_level |
|
| rows[], columns[], row_count from Dune Analytics |
|
| session_id, budget config, gateway_url, receipt — $0.01 |
|
| one-call trade verdict (ok/caution/avoid): slippage at YOUR size, side-aware funding carry, OI crowding, optional security — $0.01 |
|
| buyer-side trust oracle: sweeps the x402 marketplace, collapses sybil/factory clusters, ranks real providers by usage × delivery scores → one vetted recommendation + ready_to_pay challenge — $0.01 |
Session Intelligence
This is the economic intelligence layer in practice. The Session gives your agent — and you — real visibility into what happened, what it cost, and why.
from agentpay import quickstart, BudgetExceeded
# quickstart() registers + mints a wallet; the returned session is also a
# context manager, so you can `with` it for a printed receipt on exit.
# Budget caps are exact: max_spend=0.10 (float) == "0.10" (str).
with quickstart(max_spend=0.10) as session:
# Price an entire multi-tool plan BEFORE spending anything (free, no wallet)
plan = session.estimate_plan(["token_price", "pre_trade_check", "session_create"])
plan["total_usdc"], plan["fits_budget"] # per-step costs + cheaper alternatives inside
# Reason about cost before committing (use the *_usd Decimals for comparisons)
if session.would_exceed(session.tool_cost_usd("dune_query")):
alt = session.suggest_cheaper("dune_query") # {"name": ..., "price": ...}
# Call a tool — budget enforced before any payment is signed
r = session.call("token_price", {"symbol": "ETH"})
r.data["price_usd"] # inner tool output (r["result"]["price_usd"] still works)
r.cost # payment amount, e.g. "0"
r.network # settlement chain, e.g. "stellar-mainnet" / "base"
session.remaining_usd() # Decimal('0.10')
# For an external x402 tool that offers several chains, pick one:
# session.call("https://some-x402-tool/endpoint", {}, chain="base")
# Full receipt — every call, cost, tx hash, and settlement chain
print(session.spending_summary())
# {
# "calls": 1, "spent": "$0", "remaining": "$0.1", "budget": "$0.1",
# "breakdown": [
# {"tool": "token_price", "cost": "Free", "tx_hash": "", "network": "stellar-mainnet"}
# ]
# }Policy parameters
Control exactly what your agent is allowed to do:
from agentpay import AgentWallet, Session
wallet = AgentWallet(secret_key="S...", network="mainnet") # or quickstart()'s minted wallet
with Session(wallet,
gateway_url="https://agentpay.tools",
max_spend=0.10,
allowed_tools=["token_price", "gas_tracker", "web_search"],
max_per_tool={"dune_query": 0.02},
rate_limit=10, # max 10 calls/min
prefer_chain="base", # Base is the default; "stellar" or "stacks" to override
allowed_recipients=["0x…", "SP…"], # only these payees may be paid (any rail)
max_per_call="0.02", # no single payment above this
approve_above="0.01", # payments above this need the approver's yes
approver=lambda req: ask_human(req)) as session:
...BudgetExceeded fires before any payment goes out if a tool would push you over the cap, isn't on the allowlist, or exceeds its per-tool limit. The recipient allowlist, per-call maximum and approval gate are checked against the 402 itself — the payee and amount that would actually be signed — on every rail, and raise PolicyRejected / ApprovalRequired (both BudgetExceeded subclasses) with nothing signed. Every refusal is listed under spending_summary()["anomalies"], alongside flags for repeated identical paid calls, a single call taking half the cap, and unconfirmed legs. budget_policy() picks the cap itself from an explicit value, an env var, a rule (share of balance) or a prompt, clamped to what the wallet holds — wallet.get_sbtc_balance_usd(rate) gives that ceiling for an sBTC payer.
Example: Market intelligence agent
Five free tools, one session, full receipt.
from agentpay import quickstart
with quickstart() as session:
snapshot = session.call("market_snapshot", {})
rates = session.call("funding_rates", {"asset": "ETH"})
oi = session.call("open_interest", {"symbol": "ETH"})
fg = session.call("fear_greed_index", {})
whales = session.call("whale_activity", {"token": "ETH", "min_usd": 500_000})
m = snapshot["result"]
print(f"S&P: {m['sp500_price']:,.0f} ({m['sp500_change_pct']:+.2f}%)")
print(f"ETH: ${m['eth_price_usd']:,.0f}")
print(f"Gas: {m['gas_standard_gwei']} gwei")
avg_rate = sum(e["funding_rate_pct"] for e in rates["result"]["rates"]) / len(rates["result"]["rates"])
print(f"Funding: {avg_rate:+.4f}%/8h")
print(f"OI 24h: {oi['result']['oi_change_24h_pct']:+.2f}%")
print(f"Sentiment: {fg['result']['value_classification']}")
print(f"Whale vol: ${whales['result']['total_volume_usd']:,.0f}")
print(session.spending_summary())Use it in your agent
Agent Skills (one command, any agent)
npx skills add romudille-bit/agentpayInstalls the agentpay-route skill (find, judge, and pay for the best paid x402 tool
within a budget) and agentpay-session (hard spend cap + verifiable receipts) into
Claude Code, Codex, Droid, OpenCode, or any skills-CLI-compatible
runtime. Pair with the MCP below for keyless routing out of the box; add
AGENTPAY_BASE_KEY + AGENTPAY_MAX_SPEND for capped, in-place paid calls.
Claude Code plugin (one command)
/plugin marketplace add romudille-bit/agentpay
/plugin install agentpay@agentpayInstalls the agentpay-route skill — your agent finds, judges, and pays for the best paid
x402 tool within a budget — plus the 17 free tools. No keys needed to route.
MCP server (any runtime)
Self-contained — pure Node, no Python, no repo, no keys to start:
npx -y @romudille/agentpay-mcp{
"mcpServers": {
"agentpay": {
"command": "npx",
"args": ["-y", "@romudille/agentpay-mcp"]
}
}
}Exposes the 17 free tools plus verified_route (buyer-side trust oracle —
free preview keyless, full paid payload in wallet mode), route (legacy alias)
and estimate_plan (price a multi-tool plan before spending). Listed on
Glama.
Wallet mode (v2.4.0): add an EVM key and paid tools settle in-place — gasless EIP-3009 on Base (no ETH needed; nothing broadcast client-side, a rejected call moves no USDC) under a hard session cap:
{
"mcpServers": {
"agentpay": {
"command": "npx",
"args": ["-y", "@romudille/agentpay-mcp"],
"env": {
"AGENTPAY_BASE_KEY": "0x<EVM private key>",
"AGENTPAY_MAX_SPEND": "0.10"
}
}
}
}Fund the key's address with USDC on Base mainnet; every paid call counts
against AGENTPAY_MAX_SPEND and is refused past the cap — the budget story,
enforced inside the MCP itself. Use a dedicated small-balance key.
Buyer-side routing — find & pay for the best tool, within a budget
When an agent needs a paid tool, AgentPay discovers the options across the x402 marketplace, drops the fake/empty stubs, ranks by real usage (not price), and recommends the cheapest one that actually works — within a budget. The agent pays the provider directly (peer-to-peer, no custody) and keeps a verifiable receipt.
agentpay-route "funding rates" --budget 0.01 # ranked candidates + a recommendationPaid tools: session_create, pre_trade_check, verified_route ($0.01 each)
Three tools cost money today. session_create opens a budget-capped session with a
hard max_spend limit — for autonomous agents that need spend enforcement across
multiple calls. pre_trade_check is the first outcome bundle: one call returns
an ok/caution/avoid trade verdict from live orderbook slippage at your size,
side-aware funding carry, open-interest crowding, and an optional contract security
scan — with the per-factor breakdown and raw components embedded. verified_route
is the buyer-side trust oracle: "I need X, budget $Y — which x402 tool is
real?" It sweeps the whole marketplace, collapses sybil/factory clusters, keeps
only providers relevant to your need, ranks them by real unique-payer usage ×
the Prober's paid delivery scores, and returns
one vetted recommendation with a ready-to-pay challenge. All 17 data tools
remain free.
Price any plan before spending a cent (free, no wallet): POST /v1/plan/estimate,
or session.estimate_plan([...]) from the SDK.
When metered inference ships, it works through the same Session interface — your agent checks cost, decides if it's worth it, and pays in USDC on Base or Stellar, or sBTC on Stacks (via the SDK).
# Future — inference as a Session tool
remaining = session.remaining()
infer_cost = session.tool_cost("inference") # e.g. "$0.02"
if remaining >= infer_cost:
result = session.call("inference", {"prompt": "...", "model": "claude-haiku"})
else:
result = session.call("url_reader", {"url": summary_url}) # cheaper pathTo fund a wallet for session_create: send USDC to a Stellar wallet (S... key, issuer GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN) or a Base wallet (0x..., contract 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913).
Eating our own dog food
AgentPay's flagship analyst agent (agents/analyst/) runs daily on these exact
rails as a real customer: it prices its plan with estimate_plan, gathers free
intel, buys pre_trade_check verdicts on the majors under a hard $0.25 cap, and
publishes a market note with an on-chain-verifiable receipt. The first best
customer is the house.
Architecture
AgentPay is an x402 payment gateway and economic intelligence layer — agents call tools within a hard budget cap, pay USDC on-chain when tools cost money, and accumulate a full session receipt as they work. Free tools skip the payment step entirely; the session tracking and cost awareness are always on.
Chain support & x402 interop
Base settles via the standard x402 exact scheme (gasless EIP-3009 through the
CDP facilitator) — any standard x402 client can pay AgentPay on Base, no AgentPay
SDK required.
Stellar settles as a classic payment + text memo verified directly on Horizon.
It is supported by the AgentPay SDK (pip install agentpay-x402) and by manual
payment per the 402 instructions — but it is not the standard @x402/stellar
scheme (which uses Soroban null-account templates, signed auth entries, and
facilitator settlement). A standard @x402/stellar client cannot pay AgentPay's
Stellar rail today; migrating to the standard Soroban scheme is on the v2 roadmap.
Standard clients should pay on Base — Circle CCTP bridges USDC 1:1 between the two.
agent (Python SDK)
│
│ POST /tools/{name}/call
│ ← 200 {result: ...} ← free tools return directly
│ ← 402 {payment_id, amount, ...} ← paid tools (session_create, pre_trade_check, verified_route)
│ → USDC on Base (~2s, standard x402) or Stellar (~3–5s, SDK classic+memo)
│ → retry with X-Payment header
│ ← 200 {result: ...}
▼
gateway (FastAPI on Railway)
│
├── registry/registry.py — 20-tool catalog (17 free; session_create, pre_trade_check, verified_route — $0.01 each)
├── gateway/routes/plan.py — POST /v1/plan/estimate (free pre-flight plan pricing)
├── gateway/radar.py — Arbitrum x402 Radar discovery + settlement verify (see RADAR.md)
├── gateway/stellar.py — Stellar payment verification via Horizon
├── gateway/base.py — Base payment verification via JSON-RPC
└── gateway/services/tools_runtime.py — real API dispatchers
├── Jina Reader url_reader
├── Jina Search web_search
├── Yahoo+CoinGecko market_snapshot
├── CoinGecko token_price, token_market_data
├── Etherscan V2 gas_tracker, whale_activity, wallet_balance
├── DeFiLlama defi_tvl, yield_scanner
├── alternative.me fear_greed_index
├── Reddit crypto_news
├── Dune Analytics dune_query
├── GoPlus token_security
└── Binance+Bybit+OKX funding_rates, open_interest, orderbook_depthStacks sBTC settlement
AgentPay settles x402 micropayments in sBTC on Stacks mainnet — budget-capped,
signed client-side and never broadcast by the client (the gateway broadcasts the
signed transaction, so a hostile gateway can settle at most the signed amount).
Live on agentpay.tools since agentpay-x402 0.5.0:
from agentpay import quickstart
s = quickstart(stacks_key="<64-hex>", prefer_chain="stacks", max_spend="0.05")
r = s.call("pre_trade_check", {"symbol": "BTC", "size_usd": 25000, "side": "long"})
print(r.data["verdict"], r.tx) # verdict + the sbtc-token::transfer txidWalkthrough (start here):
docs/stacks-walkthrough.md— install → one capped mainnet payment → the receipt verified three ways → the rules refusing before signing, with real output.Mainnet reference:
docs/stacks-mainnet.md— config, the one-liner, redeeming an uncertain settle, ledger verification, the pilot agent.Runnable demo:
examples/stacks_m1_demo.py— capped session → sBTC payment → receipt → over-cap rejection.STACKS_NETWORK=mainnetruns it on mainnet; the name is from the milestone it was written for.Spending rules demo:
examples/stacks_policy_demo.py— recipient allowlist, per-call maximum and approval gate refusing sBTC payments before anything is signed, then one approved settlement; refusals on the receipt.Demo video: YouTube (~40s)
Mainnet receipts:
0x30689b5e…,0xd1de1a79…,0x59ce7014…—sbtc-token::transferpayer → gateway, each from a$0.05-capped session, chain-verified on agentpay.tools/ledger.Milestone-1 (testnet) material, kept as delivered:
docs/stacks-m1.mdand the testnet proof0xa5351bad…(PoX-5 testnet, block 82215). The testnet gateway is still up for anyone who wants to try the rail without mainnet sBTC.
Discovery
Directory | Status |
✅ agentpay-x402 | |
✅ indexed, health-checked every 15min | |
✅ listed | |
✅ listed | |
✅ @romudille/agentpay-mcp | |
✅ | |
✅ domain verified, 17 tools synced | |
✅ listed 2026-09-07 — 3 paid endpoints, 14/14 x402 compliance, measured (never self-attested) score | |
Coinbase Bazaar | ✅ indexed via REST — |
Claude Code plugin | ✅ |
✅ | |
✅ audited — score 100, verdict "proprietary" | |
✅ auto-indexed from Bazaar (6h refresh) | |
✅ listed — grade recovering post-AGE-123 | |
| dropped — redundant with Bazaar (SPA mirror) |
Agent-readable endpoints:
Endpoint | Purpose |
| AgentPay manifest |
| A2A agent card |
| LLM-readable service description |
| 402index.io discovery format |
Available Tools
20 toolscrypto_newsARead-onlyIdempotent
Latest crypto news and community sentiment from r/CryptoCurrency for any token
Use when: You need recent news headlines or community sentiment for one or more crypto tokens. Not for: you need general web news or documentation — web_search; a specific article's text — url_reader; a numeric sentiment gauge — fear_greed_index. Returns: headlines[] with title, url, sentiment (bullish/neutral/bearish), score, published_at Example response: {"currencies": "ETH", "headlines": [{"title": "Ethereum devs confirm Pectra upgrade timeline", "url": "https://reddit.com/r/CryptoCurrency/...", "sentiment": "bullish", "score": 1842, "published_at": "2026-03-22T08:14:00Z"}, {"title": "ETH gas fees drop to yearly lows", "url": "https://reddit.com/r/CryptoCurrency/...", "sentiment": "bullish", "score": 934, "published_at": "2026-03-22T06:31:00Z"}], "source": "reddit"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Feed sort order (default: hot) | hot |
| currencies | No | Comma-separated token symbols, e.g. 'BTC,ETH' | BTC,ETH |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new context: free, no API key, nothing signed or spent, and the failure modes (unknown symbol, unreachable upstream). Rate limits or pagination behavior are not mentioned, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary followed by clearly labelled Use when / Not for / Returns / Example blocks. The embedded example response is long but earns its place since no output schema exists; minor verbosity otherwise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself (headlines[] with title, url, sentiment, score, published_at) and even a concrete example payload. Combined with the source, cost and failure behavior, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (filter enum, currencies) are already documented in the schema. The description only echoes 'for any token' and shows a currencies example; it adds no format or default semantics beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Latest crypto news and community sentiment from r/CryptoCurrency') plus scope ('for any token'). The source and content type are explicit, distinguishing it from generic search tools at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'Use when' trigger and a 'Not for' clause that names three alternatives (web_search, url_reader, fear_greed_index) with the condition that selects each. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
defi_tvlARead-onlyIdempotent
DeFi protocol Total Value Locked from DeFiLlama. Returns top 10 or a specific protocol.
Use when: You need the Total Value Locked in a specific DeFi protocol or want to compare the top protocols by TVL. Not for: you want the best yield for a token — yield_scanner; protocol revenue or custom metrics — dune_query. Returns: tvl, change_1h, change_1d, change_7d, chains[], category for the protocol (or top 10 list) Example response: {"protocol": "aave", "tvl": 23800000000.0, "change_1h": 0.12, "change_1d": -1.43, "change_7d": 3.21, "chains": ["Ethereum", "Polygon", "Avalanche", "Base"], "category": "Lending", "source": "defillama"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| protocol | No | Protocol name or slug, e.g. 'uniswap', 'aave', 'lido'. Leave empty for top 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, and the description adds materially beyond them: cost ('free'), auth posture ('no API key, nothing signed or spent'), and explicit failure behavior ('Fails with an error message on an unknown symbol or an unreachable upstream source'). That failure-mode disclosure is exactly the kind of operational context an agent needs before calling.
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 cleanly sectioned into Use when / Not for / Returns / Example / Cost and failure. Every section earns its place, though the 'Example response' field list partially repeats the 'Returns:' enumeration, which is minor 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?
There is no output schema, so the description correctly compensates by enumerating return fields (tvl, change_1h/1d/7d, chains[], category) and giving a concrete example response. Combined with the cost/auth/failure notes, 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 100% and the single parameter already documents 'Leave empty for top 10'. The description restates that behavior ('Returns top 10 or a specific protocol') but adds no new syntax, format, or constraint detail. Baseline 3 applies when the schema carries the parameter semantics.
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 ('DeFi protocol Total Value Locked from DeFiLlama') and immediately defines scope: top 10 or a single named protocol. This is distinguishable from every sibling (yield_scanner, dune_query, token_market_data) 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 'Use when' clause names the two valid scenarios (single protocol TVL, comparing top protocols), and the 'Not for' clause routes to named alternatives (yield_scanner for best yield, dune_query for revenue/custom metrics). When-to-use and when-not-to-use are both present with the alternatives spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dune_queryARead-onlyIdempotent
Run any Dune Analytics query and return live onchain results by query ID. Use fast_only=True for live bots — returns cached result instantly or raises immediately, never blocks.
Use when: You need deep onchain analytics from a specific Dune query — protocol revenue, user counts, custom metrics. Not for: you have no Dune query ID — the other tools cover prices, derivatives, TVL and security without one; you need sub-second answers — set fast_only=true or use a cached tool. Returns: rows[], columns[], row_count, generated_at from the Dune Analytics query result Example response: {"query_id": 3810512, "row_count": 2, "columns": ["protocol", "revenue_usd"], "rows": [{"protocol": "Uniswap V3", "revenue_usd": 1243800.0}, {"protocol": "Aave V3", "revenue_usd": 987200.0}], "generated_at": "2026-03-22T00:00:00Z", "source": "dune"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 25) | |
| query_id | Yes | Dune Analytics query ID (visible in the query URL) | |
| fast_only | No | If True, return cached result immediately or raise — never execute a fresh query. Use for live bots where latency matters. Default: False. | |
| query_parameters | No | Optional named parameters to pass to the Dune query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, openWorld, idempotent, non-destructive), yet the description adds real value beyond them: fast_only semantics ('returns cached result instantly or raises immediately, never blocks'), cost ('free, no API key, nothing signed or spent'), and failure modes ('fails with an error message on an unknown symbol or unreachable upstream source').
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 cleanly sectioned into Use when / Not for / Returns. The example response is long but earns its place because there is no output schema to convey the return shape.
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 compensates by specifying the return fields (rows[], columns[], row_count, generated_at) and a full example response. Nested query_parameters and all four params are covered, and cost/auth/failure behavior is stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all four parameters, giving a baseline of 3. The description still adds meaning beyond the schema by explaining the latency/blocking contract of fast_only and its intended audience ('for live bots').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Run) plus resource (Dune Analytics query) scoped to a query ID, and it explicitly routes away from siblings ('the other tools cover prices, derivatives, TVL and security without one'). An agent can distinguish it from defi_tvl, token_price, etc. 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?
Explicit 'Use when' and 'Not for' sections name the exact preconditions (you need a Dune query ID) and the disqualifiers (no query ID, need sub-second answers). It even redirects to the correct fallback ('set fast_only=true or use a cached tool').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fear_greed_indexARead-onlyIdempotent
Crypto Fear & Greed Index (0=extreme fear, 100=extreme greed) with optional history
Use when: You need to gauge overall crypto market sentiment or mood — whether the market is fearful or greedy. Not for: you want token-specific sentiment — crypto_news (per-token headlines) or funding_rates (leveraged positioning). Returns: value (0–100), value_classification (e.g. 'Greed'), optional history[] Example response: {"value": 10, "value_classification": "Extreme Fear", "timestamp": 1774137600, "source": "alternative.me"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of days of history to return (default 1, max 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered structurally. The description adds genuinely useful context beyond that: free, no API key, nothing signed or spent, and error behavior on unreachable upstream. It loses a point because the advertised failure mode 'unknown symbol' is inconsistent with a schema that only exposes a limit parameter and accepts no symbol.
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 cleanly sectioned into Use when / Not for / Returns / Example / Cost. Every sentence carries distinct information; the labeled structure makes scanning fast.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so explicitly: value, value_classification, optional history, plus a concrete example response. Combined with auth and failure-mode notes, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional parameter (limit) already fully documented in the schema at 100% coverage, including default and max. The description adds no syntax or semantics beyond that, so the baseline 3 for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Crypto Fear & Greed Index) with its scale semantics (0=extreme fear, 100=extreme greed) and optional history. It explicitly distinguishes itself from token-specific siblings (crypto_news, funding_rates), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'Use when' condition (gauge overall market sentiment) and a 'Not for' clause naming two concrete alternative tools for token-specific sentiment. This is the when/when-not/alternatives pattern at full strength.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
funding_ratesARead-onlyIdempotent
Get perpetual futures funding rates across Binance, Bybit, and OKX
Use when: You need funding rates to gauge leveraged market sentiment or cost of holding a perp position. Not for: you need open interest or long/short ratio — open_interest; one verdict combining funding, OI, slippage and security for a trade — pre_trade_check. Returns: funding_rate_pct, annualized_rate_pct, sentiment (bullish/neutral/bearish) per exchange Example response: {"asset": "BTC", "rates": [{"exchange": "binance", "funding_rate_pct": 0.012, "annualized_rate_pct": 13.14, "sentiment": "bullish"}, {"exchange": "bybit", "funding_rate_pct": 0.011, "annualized_rate_pct": 12.04, "sentiment": "bullish"}, {"exchange": "okx", "funding_rate_pct": 0.009, "annualized_rate_pct": 9.85, "sentiment": "neutral"}], "source": "binance/bybit/okx"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Token symbol, e.g. 'BTC', 'ETH'. Leave empty for all major assets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds value beyond them: cost ('free'), auth requirements ('no API key, nothing signed or spent'), data provenance ('live public data'), and failure modes ('fails with an error message on an unknown symbol or an unreachable upstream source').
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?
Strongly front-loaded and sectioned (purpose, use when, not for, returns, example, cost). The 'Returns' field list and the JSON example overlap somewhat, costing a little efficiency, but both are defensible given no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape (funding_rate_pct, annualized_rate_pct, sentiment per exchange) plus a concrete example and error behavior, and its annotations carry the safety profile. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'asset' parameter is already fully documented in the schema (100% coverage, including the empty-string-for-all-majors behavior). The description adds no format, casing, or lookup guidance beyond that, so it meets the baseline without extending it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get perpetual futures funding rates') and scopes it to three named exchanges, which immediately separates it from single-venue or generic market tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'Use when' clause names the decision context (gauging leveraged sentiment / cost of holding a perp), and the 'Not for' clause routes to two exact siblings (open_interest, pre_trade_check) with the conditions that select them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gas_trackerARead-onlyIdempotent
Get current Ethereum gas prices (slow, standard, fast)
Use when: You need to know current Ethereum gas prices before submitting a transaction or estimating costs. Not for: you need gas as part of a broader read — market_snapshot already includes standard gwei; only Ethereum mainnet gas is reported. Returns: slow_gwei, standard_gwei, fast_gwei, base_fee_gwei, estimated confirmation times Example response: {"slow_gwei": 1.5, "standard_gwei": 2.0, "fast_gwei": 3.0, "base_fee_gwei": 1.2, "source": "etherscan"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds genuinely new context: free pricing, no API key, nothing signed or spent, and the failure mode (error on unknown symbol or unreachable upstream). It stops short of stating rate limits or caching freshness, which for a 'current' price feed would be the one remaining useful 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?
Front-loaded with the core purpose, then labeled sections (Use when / Not for / Returns / Example / Price) that make it skimmable. Slightly long for a zero-parameter read tool, and the inline example response duplicates the field list above it, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return burden and does it well: named fields (slow_gwei, standard_gwei, fast_gwei, base_fee_gwei, confirmation times) plus a concrete example payload. Combined with the failure-mode and cost notes, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly avoids inventing parameter semantics for a no-arg tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get current Ethereum gas prices') plus the three tiers (slow, standard, fast), and explicitly scopes it to Ethereum mainnet only. An agent can distinguish it from the 19 siblings, including the one that overlaps (market_snapshot).
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?
Uses an explicit 'Use when' / 'Not for' structure and names the alternative route (market_snapshot already includes standard gwei) with the condition that selects it. Nothing is left to inference about when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_snapshotARead-onlyIdempotent
Fed rate, inflation proxy, S&P 500, BTC, ETH, and gas in one call. Replaces three separate API integrations with a single normalized response — the only tool that gives you macro + crypto in one shot.
Use when: You need a combined macro + crypto market overview in one call: S&P 500, Treasury yield, BTC, ETH, and Ethereum gas. Not for: you need one asset in depth — token_price, gas_tracker or funding_rates; history or time series — dune_query. Returns: sp500_price, sp500_change_pct, treasury_yield_10y, btc_price_usd, eth_price_usd, gas_standard_gwei, timestamp Example response: {"sp500_price": 5234.18, "sp500_change_pct": -0.42, "treasury_yield_10y": 4.31, "btc_price_usd": 67200.0, "eth_price_usd": 3450.0, "gas_standard_gwei": 5.2, "timestamp": "2026-05-26T12:00:00Z", "source": "yahoo_finance+coingecko+etherscan"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior. The description adds material beyond annotations: free public data, no API key, nothing signed or spent, and failure behavior on unknown symbols or unreachable upstream sources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and organized into purpose, use cases, exclusions, returns, and example. It is somewhat verbose, repeating 'one call' and including an example response that largely restates the return fields, but no section is misleading or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input schema and no output schema, the description carries the full documentation burden. It lists returned fields and provides an example response, plus safety and failure context, so an agent has enough information to invoke and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero input parameters, so there are no parameter semantics to document. Per the baseline for zero-parameter tools, a 4 is appropriate; the description correctly does not invent parameter guidance.
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 combined resource: macro and crypto market snapshot in one call. It clearly distinguishes itself from siblings such as token_price, gas_tracker, and funding_rates. However, it advertises 'Fed rate, inflation proxy' while the listed returns do not include those fields, creating a minor mismatch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use when' and 'Not for' sections explicitly define the intended context and name alternatives for single-asset depth and historical/time-series queries. An agent can route between this tool and token_price, gas_tracker, funding_rates, or dune_query without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_interestARead-onlyIdempotent
Get total open interest in perpetual futures for any asset, with 1h and 24h change rates. Pairs with funding_rates to complete the derivatives picture — rising OI with high funding = overcrowded position.
Use when: You need to know total open interest in perpetual futures and whether it's rising or falling. Combine with funding_rates for a full derivatives picture. Not for: you need the funding cost of holding a position — funding_rates; a single trade verdict — pre_trade_check. Returns: total_oi_usd, oi_change_1h_pct, oi_change_24h_pct, long_short_ratio, per-exchange breakdown Example response: {"asset": "ETH", "price_usd": 2069.73, "total_oi_usd": 8420000000.0, "oi_change_1h_pct": 1.2, "oi_change_24h_pct": 12.4, "long_short_ratio": 1.08, "exchanges": [{"exchange": "Binance", "oi_contracts": 4066123.5, "oi_change_1h_pct": 1.2, "oi_change_24h_pct": 12.4, "long_short_ratio": 1.08}], "source": "binance/bybit"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Token symbol, e.g. 'BTC', 'ETH', 'SOL' | BTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, idempotent, openWorld), and the description adds genuinely new context: cost ('free'), no API key, nothing signed or spent, and the specific failure mode (error on unknown symbol or unreachable upstream). That is real disclosure beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and structured with clear labeled sections (Use when / Not for / Returns), which is efficient. However the example response is lengthy and the opening sentence's phrasing is partially repeated in the 'Use when' block, so it is slightly padded rather than maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating return fields (total_oi_usd, oi_change_1h_pct, oi_change_24h_pct, long_short_ratio, per-exchange breakdown) and giving a concrete example response. Combined with usage routing and failure modes, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single optional parameter with a default of 'BTC', already fully documented in the schema. The description adds no syntax or format detail for the asset parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get total open interest in perpetual futures) plus supplementary fields (1h/24h change rates). It explicitly distinguishes itself from siblings funding_rates and pre_trade_check by naming what each is for, so an agent can separate them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'Use when' and 'Not for' sections that name the alternative tools (funding_rates, pre_trade_check) and the conditions selecting each. It even articulates the combination pattern (rising OI + high funding = overcrowded), 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.
orderbook_depthARead-onlyIdempotent
Get real bid/ask depth and slippage estimates at $10k, $50k, and $250k notional from Binance and Bybit. Use before sizing a position to know if you can execute without moving the market.
Use when: You need to estimate slippage before executing a large trade. Tells you how much a $10k, $50k, or $250k order will move the market. Not for: you need market cap or 24h volume — token_market_data; a full pre-trade verdict at your size — pre_trade_check. Centralised-exchange books (Binance/Bybit) only, not DEX pools. Returns: best_bid, best_ask, spread_pct, depth with slippage_pct at $10k/$50k/$250k notional, per-exchange best prices Example response: {"asset": "ETH", "pair": "ETH/USDT", "best_ask": 2071.5, "best_bid": 2071.2, "spread_pct": 0.0145, "depth": [{"notional_usd": 10000, "slippage_pct": 0.002, "executable": true}, {"notional_usd": 50000, "slippage_pct": 0.008, "executable": true}, {"notional_usd": 250000, "slippage_pct": 0.031, "executable": true}], "exchanges": [{"exchange": "Binance", "best_ask": 2071.5, "best_bid": 2071.2}, {"exchange": "Bybit", "best_ask": 2071.6, "best_bid": 2071.1}], "source": "binance/bybit"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | Yes | Token symbol, e.g. 'BTC', 'ETH', 'SOL' | ETH |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld, but the description adds substantive context beyond them: free pricing, no API key, nothing signed or spent, CEX-only constraint (not DEX), and explicit error behavior on unknown symbols or unreachable upstreams. This is well above the bar.
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 purpose followed by clearly labelled 'Use when', 'Not for', 'Returns', and example blocks. Every section earns its place; length is justified by the coverage it provides.
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 specifies return fields, a concrete example response, cost/auth profile, and failure modes. An agent has everything needed to invoke and interpret 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 100% and only one parameter exists, so the schema already documents 'asset'. The description only reinforces this via the example ('ETH'), adding no syntax or format detail beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) with precise resource and scope: real bid/ask depth and slippage at $10k/$50k/$250k notional from Binance and Bybit. Explicitly differentiates from siblings token_market_data (market cap/24h volume) and pre_trade_check (full pre-trade verdict).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('before sizing a position', 'before executing a large trade') and when-not-to-use clauses that name the correct alternative tools for each excluded case. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pre_trade_checkA
One-call pre-trade sanity check: 'I want to long $X of SYMBOL — is now sane?' Combines live orderbook slippage at YOUR size, cross-exchange funding (carry cost), open-interest crowding, and contract security (GoPlus) into a single ok/caution/avoid verdict with a per-factor breakdown. Major ERC-20 addresses (LINK, UNI, ARB, OP, AAVE, PEPE, SHIB) resolve automatically; native assets (BTC, ETH, SOL, ...) report security n/a; an unrecognized token without token_address reads 'unknown' and caps the verdict at caution — an unscreened contract can never read 'ok'. Replaces four API integrations and the judgment layer on top of them. Raw component data embedded so you can apply your own thresholds.
Use when: An agent (or human) is about to enter a position and wants one verdict covering liquidity, carry, crowding, and security — instead of four raw feeds plus its own synthesis. Not for: you need a single raw factor — funding_rates, open_interest, orderbook_depth or token_security are free; you are not about to size a position. This call settles $0.01 on-chain. Returns: verdict (ok/caution/avoid), factors{liquidity,carry,crowding,security} each with level + reason, components{orderbook_depth,funding_rates,open_interest}, symbol, side, size_usd Example response: {"symbol": "ETH", "side": "long", "size_usd": 50000, "verdict": "caution", "factors": {"liquidity": {"level": "ok", "slippage_pct": 0.011, "bucket_usd": 50000, "reason": "fills within 0.011% of best ask"}, "carry": {"level": "caution", "median_funding_pct": 0.062, "annualized_pct": 67.9, "reason": "longs paying elevated funding"}, "crowding": {"level": "ok", "long_short_ratio": 1.4, "oi_change_24h_pct": 3.2, "reason": "positioning unremarkable"}, "security": {"level": "skipped", "reason": "no token_address provided"}}}
Price: $0.01 USDC per call — settles on-chain from the wallet in STELLAR_SECRET_KEY (funded mainnet Stellar account required); not read-only. Live public data, no other API key.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Trade direction (funding carry is side-aware) | long |
| symbol | Yes | Asset to check, e.g. 'ETH', 'BTC', 'SOL' | |
| size_usd | No | Intended position size in USD (drives the slippage check) | |
| token_address | No | Optional ERC-20 contract address for the GoPlus security scan. Auto-resolved for major tokens; required for a full verdict on tokens the resolver doesn't know (otherwise security reads 'unknown' and caps the verdict at caution) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already flagging non-read-only/open-world, the description discloses what annotations cannot: the $0.01 on-chain settlement, the required funded mainnet Stellar account in STELLAR_SECRET_KEY, no API key needed, and the fallback semantics (native assets report security n/a; unrecognized tokens read 'unknown' and cap the verdict at caution). These are real operational constraints, not restated hints.
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 one-line purpose, then clearly separated Use when / Not for / Returns / Example blocks. It is long and mildly repetitive (the $0.01 price is stated twice), but nearly every sentence carries routing, constraint, or output-shape 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?
Covers a complex multi-factor, paid, non-idempotent tool without an output schema by listing the return fields plus a full worked example response showing verdict, per-factor levels, and embedded raw components. An agent has enough to size inputs and interpret outputs correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes further by explaining the token_address resolution behavior — auto-resolution for named major tokens, security 'n/a' for native assets, and the caution cap for unknown tokens — which materially affects how an agent should populate that field.
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 concrete verb+resource and a quoted user intent ('I want to long $X of SYMBOL — is now sane?'), then enumerates the four factors it fuses. It explicitly positions itself against siblings by naming funding_rates, open_interest, orderbook_depth and token_security as the raw components it replaces.
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?
Has explicit 'Use when' and 'Not for' sections: use when about to enter a position and want one combined verdict; not for a single raw factor (naming the four free alternatives) or when not sizing a position. This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_createA
Open a budget-capped agent session on AgentPay. Pay $0.01 USDC once — get a session_id, budget config, and gateway URL. Enforces a hard max_spend cap across all subsequent tool calls via the AgentPay SDK. The entry point for agents discovering AgentPay on Base Bazaar.
Use when: You want to start an AgentPay session with a hard spend cap and get a session_id for tracking.
Not for: you only need a session for free tools — the SDK's quickstart() opens one at no cost; this call settles $0.01 on-chain.
Returns: session_id, max_spend, agent_address, gateway_url, tools_endpoint, created_at, receipt (tx_hash + network)
Example response: {"session_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "max_spend": "0.10", "agent_address": "GBCVQCNFWPM3GDO4GPT4YEQ42ZHPY67QTJA3WN5ERQIKQDXKBX62SLNJ", "label": null, "gateway_url": "https://agentpay.tools", "tools_endpoint": "https://agentpay.tools/tools", "created_at": "2026-05-27T12:00:00Z", "receipt": {"tx_hash": "0xabc...def", "network": "base", "amount_usdc": "0.01"}, "sdk_hint": "Use from agentpay import Session to enforce the max_spend cap client-side."}
Price: $0.01 USDC per call — settles on-chain from the wallet in STELLAR_SECRET_KEY (funded mainnet Stellar account required); not read-only. Live public data, no other API key.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional human-readable label for this session | |
| max_spend | No | Hard budget cap in USDC for this session, e.g. '0.10' | 0.10 |
| agent_address | No | Your wallet address (Stellar G... or EVM 0x...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint false, openWorldHint true, non-idempotent, non-destructive), and the description still adds substantial context: the $0.01 on-chain settlement, the funded mainnet Stellar account requirement via STELLAR_SECRET_KEY, the hard max_spend enforcement across all downstream calls, and that no other API key is needed.
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 with labeled Use when / Not for / Returns sections, but the price-and-network information is stated twice (in the opening and the closing paragraph) and the inline example response is long. Efficient overall, with a small amount of redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself, enumerating every returned field (session_id, max_spend, agent_address, gateway_url, tools_endpoint, created_at, receipt) plus a concrete example. An agent has everything needed to invoke and consume the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds enforcement meaning to max_spend ('hard max_spend cap across all subsequent tool calls') and clarifies that the call returns the budget config and session_id. It modestly exceeds the schema's own wording.
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 ('Open a budget-capped agent session on AgentPay') and immediately scopes it with the entry-point role. No sibling among the data tools (token_price, gas_tracker, etc.) overlaps this session-management function, so the agent can discriminate it easily.
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 'Use when' and 'Not for' sections, and the exclusion names the concrete alternative (SDK quickstart() opening a free session) plus the selecting condition (spend cap / on-chain settlement). This 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.
token_market_dataARead-onlyIdempotent
Get market cap, 24h volume, ATH, and price change for any token. Note: does NOT return pool depth or slippage — for pre-trade liquidity estimates, use a dedicated orderbook tool.
Use when: You need 24h trading volume, market cap, or all-time high for a token pair on decentralized exchanges. Not for: you only need the spot price — token_price is lighter; you need pool depth or slippage — orderbook_depth. Returns: volume_24h_usd, market_cap_usd, price_usd, ath_usd, price_change_24h_pct Example response: {"token_a": "ETH", "token_b": "USDC", "price_usd": 2071.45, "volume_24h_usd": 312847293.0, "volume_change_24h_pct": -8.3, "market_cap_usd": 249800000000.0, "ath_usd": 4878.26, "price_change_24h_pct": -3.91, "source": "coingecko"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| token_a | Yes | First token symbol | |
| token_b | Yes | Second token symbol, e.g. USDC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnlyHint/idempotentHint, the description adds substantial value beyond them: 'free', 'no API key', 'nothing signed or spent', and explicit failure behavior on unknown symbols or unreachable upstreams. This exceeds the annotation baseline by disclosing cost, auth, and error semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core capability, then structured with 'Use when' / 'Not for' / 'Returns' / 'Example response' / 'Price'. Every sentence earns its place; no repetition 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?
For a read-only data tool with no output schema, the description provides return fields, an example response, cost/auth information, and failure modes—everything an agent needs 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?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by implying a token pair (token_a/token_b) and demonstrating the pair in the example response (ETH/USDC), which clarifies that both tokens are required and how they interact—beyond the schema's terse field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get market cap, 24h volume, ATH, and price change for any token') and explicitly distinguishes itself from the sibling orderbook_depth and token_price. An agent can tell exactly what this tool returns without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'Use when' and 'Not for' clauses name the alternative tools (token_price for spot price, orderbook_depth for pool liquidity) and the exact conditions that select them. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token_priceARead-onlyIdempotent
Get the current USD price of any cryptocurrency token
Use when: You need the current USD price, 24h change, or market cap of any cryptocurrency. Not for: you need volume, ATH or a pair quote — token_market_data; a one-call macro + crypto overview — market_snapshot; pool depth or slippage — orderbook_depth. Returns: price_usd, change_24h_pct, market_cap_usd, coin_id Example response: {"symbol": "ETH", "price_usd": 2069.73, "change_24h_pct": -4.04, "market_cap_usd": 250330787714.19, "source": "coingecko"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Token symbol, e.g. BTC, ETH, SOL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond them: it is free, needs no API key, nothing is signed or spent, and it fails with an error on an unknown symbol or unreachable upstream. It does not state rate limits or caching, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then structured 'Use when / Not for / Returns / Example' blocks. Every sentence earns its place; the example response and failure notes are compact and non-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, but the description enumerates return fields (price_usd, change_24h_pct, market_cap_usd, coin_id) and gives a concrete example response, plus error behavior. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (symbol) at 100% schema description coverage, so the schema already documents it with an example (BTC, ETH, SOL). The description adds nothing about symbol format or case-sensitivity, matching the baseline 3 when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the current USD price of any cryptocurrency token') and immediately names the sibling it is not, routing volume/ATH/pair quotes to token_market_data. An agent can distinguish it from token_market_data, market_snapshot and orderbook_depth 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?
Explicit 'Use when' (needs price, 24h change, market cap) and 'Not for' clauses that name the three alternative tools and the exact conditions selecting each. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
token_securityARead-onlyIdempotent
Scan any token contract for honeypot, rug pull, and security risks
Use when: You need to check if a token contract is safe before trading or investing. Not for: the asset is a native coin (BTC, ETH, SOL) with no contract — nothing to scan; you want liquidity or price — orderbook_depth / token_price. Ethereum and BSC contracts only. Returns: risk_level, is_honeypot, buy_tax, sell_tax, holder_count, owner_address, is_mintable, can_take_back_ownership Example response: {"contract_address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "chain": "ethereum", "risk_level": "low", "is_honeypot": false, "buy_tax": 0.0, "sell_tax": 0.0, "holder_count": 842341, "is_mintable": false, "can_take_back_ownership": false, "source": "goplus"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Blockchain to query (default: ethereum) | ethereum |
| contract_address | Yes | Token contract address (0x...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/openWorld, and the description adds genuinely new context: cost ('free'), auth ('no API key, nothing signed or spent'), data provenance ('live public data'), and failure behavior ('errors on unknown symbol or unreachable upstream'). This goes well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then organizes guidelines, return fields, an example response, and cost/failure notes into scannable labeled blocks. No filler sentences; the example payload is high-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?
With no output schema, the description compensates by enumerating every returned field and giving a concrete example response, plus cost and error behavior. An agent has everything needed to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (contract_address, chain with enum and default) are fully documented by the schema. The description only restates the chain restriction ('Ethereum and BSC contracts only'), adding little format or syntax detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('scan') and resource ('token contract') with the exact risk classes covered (honeypot, rug pull, security risks). It is immediately distinguishable from siblings like token_price and orderbook_depth, which it explicitly disclaims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'Use when' (checking a contract before trading/investing) and 'Not for' conditions, naming the alternative tools (orderbook_depth / token_price) for the excluded liquidity/price case, plus a native-coin exclusion and a chain limitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_readerARead-onlyIdempotent
Convert any URL to clean, LLM-ready markdown. Strips ads, nav, and boilerplate — returns just the content. No API key needed.
Use when: You need to read the content of a web page or article and get clean, structured text for further processing. Not for: you do not have a URL yet — web_search returns pages with content; the page requires a login or renders only in a browser. Returns: content (markdown), url, length, truncated flag Example response: {"url": "https://example.com", "content": "# Example Domain\n\nThis domain is for use in illustrative examples...", "length": 1256, "truncated": false, "source": "jina_reader"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to fetch and convert to markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds value beyond them: no API key, cost is free, boilerplate-stripping behavior, and failure on unreachable upstream. The only blemish is a likely copy-paste artifact ('unknown symbol') that doesn't fit a URL reader.
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 with the core action first, then labeled Use when / Not for / Returns blocks. Mostly earns its place, though the 'Price: free' line and the stray 'unknown symbol' phrase add noise to an otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by listing return fields (content, url, length, truncated) and giving a concrete example response. Combined with failure behavior and cost, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single required URL parameter already documented in the schema. The description adds no URL format, scheme, or validation detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert any URL to clean, LLM-ready markdown') with concrete scope, and explicitly differentiates from the sibling web_search in the 'Not for' clause. An agent can distinguish this from web_search without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'Use when' and 'Not for' sections, naming the alternative (web_search) and the conditions that select it (no URL yet, login-walled, JS-only rendering). This is textbook when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verified_routeA
Paid buyer-side trust oracle: 'I need X, budget $Y — which x402 tool is real?' Sweeps the WHOLE x402 marketplace across many queries (a single search shows only a slice), collapses sybil/factory clusters (one wallet stamping many fake-distinct listings → one entry), ranks the genuinely-used survivors by real unique-payer usage, and returns ONE vetted recommendation with a ready-to-pay x402 challenge. The credit-bureau check an agent cannot do itself in one query — pay $0.01 to avoid paying a scam or a dead stub.
Use when: An agent is about to pay an unknown x402 tool and wants the real, used, non-sybil one under budget — not just the cheapest. Not for: you already know which AgentPay tool you need — call it directly; you only want a free preview of the marketplace ranking — the MCP's keyless verified_route preview. This call settles $0.01 on-chain. Returns: recommendation (with ready_to_pay), survivors[], catalog{scanned, real_providers, sybil_collapsed, biggest_factory}, vetting summary Example response: {"need": "dex pair liquidity", "chain": null, "budget_usd": "1", "recommendation": {"name": "Otto AI", "url": "https://otto.example/dex", "price_usd": "0.001", "network": "eip155:8453", "pay_to": "0x0e84ddedaae6a7", "payers30d": 200, "calls30d": 3246, "quality": 3851, "flags": [], "ready_to_pay": {"url": "https://otto.example/dex", "network": "eip155:8453", "price_usd": "0.001", "accepts": {"scheme": "exact", "network": "eip155:8453"}}}, "survivors": [], "catalog": {"scanned": 117, "after_vetting": 114, "real_providers": 41, "unique_wallets": 38, "sybil_collapsed": 73, "biggest_factory": {"pay_to": "0x2bb72231eed3", "listings": 72}}, "vetting": "swept 17 queries \u2192 117 listings \u2192 collapsed 73 sybil listings \u2192 41 real providers"}
Price: $0.01 USDC per call — settles on-chain from the wallet in STELLAR_SECRET_KEY (funded mainnet Stellar account required); not read-only. Live public data, no other API key.
| Name | Required | Description | Default |
|---|---|---|---|
| need | Yes | What the agent needs, e.g. 'dex pair liquidity', 'crypto prices' | |
| chain | No | Optional chain filter: 'base', 'arbitrum', 'arbitrum-stack'. Empty = all chains. | |
| budget_usd | No | Max USDC the agent will pay the downstream tool per call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: settles $0.01 on-chain from STELLAR_SECRET_KEY, requires a funded mainnet Stellar account, is not read-only, uses live public data with no other API key, and explains the sybil-collapse behavior and return shape. Annotations only cover safety hints, so this description carries the real behavioral load and does so richly.
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 and the use-when/not-for routing, which is good structure. However, it is dense and includes a full example response JSON inline, which is longer than needed for a 3-param tool and slightly buries the essential routing under illustrative bulk.
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?
Covers pricing, auth/wallet requirements, sybil behavior, return fields, and an example response despite no output schema. For a paid, non-read-only, open-world tool, this is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mentions need/budget and chain filtering contextually but adds no syntax or enumeration details beyond the schema (e.g., no examples of chain values beyond what the schema already lists).
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, unusual verb+resource: a paid buyer-side trust oracle that sweeps the x402 marketplace, collapses sybil clusters, and returns one vetted recommendation. The quoted user-intent framing ('I need X, budget $Y — which x402 tool is real?') makes it immediately distinguishable from siblings like pre_trade_check or token_security.
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 'Use when' and 'Not for' sections name the alternatives: call the known AgentPay tool directly, or use the free keyless verified_route preview. The condition that selects this tool (about to pay an unknown x402 tool and want the real, used, non-sybil one under budget) is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_balanceARead-onlyIdempotent
Get the token balances for any Ethereum or Stellar wallet address
Use when: You need to look up the token holdings of an Ethereum or Stellar wallet address. Not for: you want a token's price or market data rather than one address's holdings — token_price / token_market_data; large transfers across many wallets — whale_activity. Ethereum addresses are 0x…, Stellar addresses G…; no other chains. Returns: list of token balances (symbol, amount) for the given address Example response: {"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "chain": "ethereum", "balances": [{"token": "ETH", "amount": "1.234"}, {"token": "USDC", "contract": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "amount": "500.00"}]}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Blockchain to query | |
| address | Yes | Wallet address (Ethereum 0x... or Stellar G...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description nonetheless adds real context the annotations cannot: it is free, requires no API key, nothing is signed or spent, and it fails with an error on unknown symbols or unreachable upstreams. It stops short of describing pagination or rate limits, but for a read-only public lookup this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then blocks for usage, return shape, example and cost. Every section earns its place, though the literal example response is somewhat verbose for a two-parameter lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by describing the return shape ('list of token balances (symbol, amount)') and giving a concrete example response. Combined with the explicit chain restriction and error behavior, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented with the 0x…/G… format hints in the schema itself. The description usefully reinforces that no chains other than Ethereum and Stellar are supported, but adds little syntax beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the token balances for any Ethereum or Stellar wallet address') with the scope of chains bounded. It explicitly distinguishes itself from token_price/token_market_data and whale_activity, so an agent can select it 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?
Provides a 'Use when' line and a 'Not for' line that names the specific alternative tools (token_price, token_market_data, whale_activity) and the condition that routes to each. Nothing about when-not-to-use is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchARead-onlyIdempotent
Search the web and return the top 5 results with their full content as clean markdown. Better than DIY because zero setup and results include page content, not just links.
Use when: You need to find current information on any topic — news, documentation, prices, events, or anything else on the web. Not for: you already have the URL — url_reader; you want crypto headlines with sentiment — crypto_news. Returns: results[] with url, title, description, content; query; count Example response: {"query": "ETH gas fees today", "count": 5, "results": [{"url": "https://etherscan.io/gastracker", "title": "Ethereum Gas Tracker", "description": "Real-time Ethereum gas price tracker", "content": "Current gas: 2 Gwei..."}], "source": "jina_search"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, openWorldHint, idempotentHint), and the description adds real operational context: free, no API key, nothing signed or spent, and a stated failure mode. It also discloses that results include page content, not just links, which is behaviorally meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded and organized into Use when / Not for / Returns / Example sections. The example response and the 'Better than DIY' framing are mildly verbose but each section carries useful routing or format information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by documenting the return fields (url, title, description, content; query; count) and giving a concrete example response. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, the schema already documents 'query'. The description implies the result count (top 5) but adds no syntax or format guidance for the query itself. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (the web) with the exact result shape ('top 5 results with their full content as clean markdown'). It distinguishes itself from siblings by naming url_reader and crypto_news as the wrong choices for adjacent needs.
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 'Use when' and 'Not for' sections name the conditions that select this tool and route the agent to specific alternatives (url_reader when the URL is known, crypto_news for sentiment headlines). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_activityARead-onlyIdempotent
Detect recent large wallet movements for a token (whale tracking)
Use when: You need to detect large token transfers that may signal institutional moves, accumulation, or sell-offs. Not for: you need one address's holdings — wallet_balance; exchange order-book size rather than on-chain transfers — orderbook_depth. Ethereum ERC-20 transfers only. Returns: large_transfers[] with from, to, amount, usd_value, minutes_ago; total_volume_usd Example response: {"token": "USDC", "large_transfers": [{"from": "0xabc...1234", "to": "0xdef...5678", "amount": 5000000.0, "usd_value": 5000000.0, "minutes_ago": 12}, {"from": "0x111...aaaa", "to": "0x222...bbbb", "amount": 2500000.0, "usd_value": 2500000.0, "minutes_ago": 34}], "total_volume_usd": 7500000.0, "source": "etherscan"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Token symbol to track | |
| min_usd | No | Minimum transaction size in USD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds real value beyond that: 'Ethereum ERC-20 transfers only' scopes the data source, and 'no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source' discloses auth and failure behavior. Only the lack of rate-limit or freshness-window detail keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by scannable Use when / Not for / Returns / Example / Price blocks — every section is labeled and easy to parse. The full JSON example response is somewhat long, but it demonstrates the shape of large_transfers[] and is defensible for a tool with no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating return fields (from, to, amount, usd_value, minutes_ago, total_volume_usd) and giving a concrete example. Combined with the Ethereum-only scope and documented failure modes, 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 100%, so both parameters are already documented in the schema, establishing a baseline of 3. The description's 'large wallet movements' hints at the min_usd threshold but never explains its default or units, so it adds essentially nothing over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Detect recent large wallet movements for a token' — with the parenthetical 'whale tracking' anchoring the concept. An agent can distinguish this from token_price, wallet_balance, or orderbook_depth 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?
Explicit 'Use when' and 'Not for' clauses name two concrete alternatives (wallet_balance for address holdings, orderbook_depth for exchange book size) and give the discriminating condition for each. This is exactly the when/when-not/alternatives structure that earns the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yield_scannerARead-onlyIdempotent
Find best DeFi yield opportunities across protocols for a given token
Use when: You need to find the best yield/APY for a token across DeFi protocols. Not for: you need a protocol's total TVL rather than pool APYs — defi_tvl; risk_level is a heuristic, run token_security on the pool's token before depositing. Returns: list of pools with protocol, apy, tvl_usd, chain, risk_level sorted by APY descending Example response: {"token": "USDC", "pools": [{"protocol": "morpho", "apy": 8.74, "tvl_usd": 312000000.0, "chain": "Ethereum", "risk_level": "low"}, {"protocol": "aave-v3", "apy": 5.21, "tvl_usd": 1840000000.0, "chain": "Ethereum", "risk_level": "low"}, {"protocol": "compound-v3", "apy": 4.87, "tvl_usd": 920000000.0, "chain": "Ethereum", "risk_level": "low"}], "source": "defillama"}
Price: free. Read-only live public data; no API key, nothing signed or spent. Fails with an error message on an unknown symbol or an unreachable upstream source.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Filter by chain: 'ethereum', 'base', 'arbitrum', 'polygon'. Leave empty for all chains. | |
| token | Yes | Token symbol to find yields for, e.g. 'ETH', 'USDC', 'BTC' | |
| min_tvl | No | Minimum pool TVL in USD (default 1,000,000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive/open-world, and the description adds substantive context on top: cost ('free'), auth ('no API key, nothing signed or spent'), and failure behavior (error on unknown symbol or unreachable upstream). It also discloses the risk_level heuristic caveat, which is not visible in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then cleanly labeled Use when/Not for/Returns/Example sections. The embedded example response is somewhat long, but it substitutes for the missing output schema, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by describing the return shape ('list of pools with protocol, apy, tvl_usd, chain, risk_level sorted by APY descending') and giving a concrete example. Failure modes and constraints are also covered, leaving nothing essential missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (token, chain, min_tvl) are already documented in the schema. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope ('Find best DeFi yield opportunities across protocols for a given token') and explicitly contrasts with the sibling defi_tvl, which handles TVL rather than pool APYs. An agent can distinguish it from related siblings 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?
Provides explicit 'Use when' and 'Not for' clauses naming the alternative tool (defi_tvl), plus a proactive prerequisite suggesting token_security before depositing. When-to-use, when-not-to-use, and the alternative are all covered.
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.
5 tool updates
v0.3.2- Changed
dune_query1 field changed- added
Input schema / properties / fast_onlyAdded value: +{ + "default": false, + "description": "If True, return cached result immediately or raise — never execute a fresh query. Use for live bots where latency matters. Default: False.", + "type": "boolean" +}
- Changed
funding_rates1 field changed- added
Input schema / properties / asset / descriptionAdded value: +"Token symbol, e.g. 'BTC', 'ETH'. Leave empty for all major assets."
- Changed
open_interest3 fields changed- added
Input schema / properties / assetAdded value: +{ + "default": "BTC", + "description": "Token symbol, e.g. 'BTC', 'ETH', 'SOL'", + "type": "string" +} - removed
Input schema / properties / symbolRemoved value: -{ - "description": "Asset symbol, e.g. BTC or ETH", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "symbol" -]
- Changed
orderbook_depth4 fields changed- added
Input schema / properties / assetAdded value: +{ + "default": "ETH", + "description": "Token symbol, e.g. 'BTC', 'ETH', 'SOL'", + "type": "string" +} - removed
Input schema / properties / exchangeRemoved value: -{ - "default": "binance", - "description": "Exchange to query: binance (default) or bybit", - "type": "string" -} - removed
Input schema / properties / symbolRemoved value: -{ - "description": "Trading pair, e.g. ETHUSDT or BTCUSDT", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "symbol" -]New value: +[ + "asset" +]
- Changed
yield_scanner3 fields changed- added
Input schema / properties / chain / descriptionAdded value: +"Filter by chain: 'ethereum', 'base', 'arbitrum', 'polygon'. Leave empty for all chains." - added
Input schema / properties / min_tvl / descriptionAdded value: +"Minimum pool TVL in USD (default 1,000,000)" - changed
Input schema / properties / token / descriptionPrevious value: -"Token symbol, e.g. ETH, USDC"New value: +"Token symbol to find yields for, e.g. 'ETH', 'USDC', 'BTC'"
11 tool updates
v0.3.1- Added
defi_tvl - Added
dune_query - Added
funding_rates - Added
gas_tracker - Added
market_snapshot - Added
open_interest - Changed
pre_trade_check1 field changed- changed
Input schema / properties / token_address / descriptionPrevious value: -"Optional ERC-20 contract address — adds a GoPlus security scan"New value: +"Optional ERC-20 contract address for the GoPlus security scan. Auto-resolved for major tokens; required for a full verdict on tokens the resolver doesn't know (otherwise security reads 'unknown' and caps the verdict at caution)"
- Added
token_price - Added
verified_route - Added
wallet_balance - Added
web_search
12 tool updates
v0.3.0- Removed
defi_tvl - Removed
dex_liquidity - Removed
dune_query - Removed
gas_tracker - Added
orderbook_depth - Added
pre_trade_check - Added
session_create - Added
token_market_data - Removed
token_price - Added
url_reader - Removed
wallet_balance - Added
yield_scanner
10 tool updates
v0.1.0- First observed
crypto_news - First observed
defi_tvl - First observed
dex_liquidity - First observed
dune_query - First observed
fear_greed_index - First observed
gas_tracker - First observed
token_price - First observed
token_security - First observed
wallet_balance - First observed
whale_activity
TDQS
Scored across 20 tools
Each tool carries explicit 'Use when / Not for' guidance that sharply delineates boundaries, e.g. token_price vs token_market_data vs orderbook_depth. Some conceptual overlap remains between aggregate tools (market_snapshot, pre_trade_check) and the individual feeds they subsume, but the descriptions resolve it well.
Nearly all tools follow a consistent snake_case noun-phrase convention (token_price, gas_tracker, orderbook_depth, funding_rates). Minor deviation: session_create uses noun_verb ordering while the rest are noun_noun, but the style is uniformly readable.
20 tools is on the heavy side but justified by a broad domain spanning spot prices, derivatives, DeFi, security, web search, and the x402 session/payment layer. Each tool targets a distinct data need, so the count is defensible rather than padded.
The surface covers prices, market data, gas, derivatives, DeFi yields/TVL, token security, sentiment/news, on-chain analytics, and wallet balances, plus x402 session entry. Minor gaps: no session close/update or list, and historical/time-series access only via dune_query with a query ID.
Maintenance
Related MCP Connectors
Pay-per-call data APIs for AI agents. USDC on Base via x402. 33 tools, no signup.
Market data and web intelligence for AI agents, paid per call in USDC on Base via x402.
Pay-per-call crypto market intelligence for AI agents. USDC on Base via x402.
Pay-per-call (x402/USDC-Base) web + crypto data tools for AI agents: audit, extract, crypto, DeFi.
Related MCP Servers
AlicenseAqualityCmaintenancePre-trade DeFi intelligence for AI agents. 20 paid x402 endpoints, USDC on Base.2323 npm1MIT- AlicenseAqualityDmaintenancePay-per-call x402 data products on Base mainnet — sanctions screening, aviation weather, mortgage rates, US property dossier, title chain, wallet balance, and agent session auth. Every call settles in USDC with an on-chain receipt, no accounts or API keys.734 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to discover, evaluate, and call any x402 API service with automatic USDC payment, including tools for wallet setup, service catalog browsing, recommendations, health checks, and direct API calls.8 npm-
- FlicenseAqualityCmaintenancePay-per-call tools for AI agents including trust checks, due diligence, market data, and human-verified approvals, settled in USDC on Base via the x402 protocol.16-