coin-mcp
Provides real-time market data, order books, recent trades, OHLCV, and funding rates from Binance exchange via CCXT integration.
Provides real-time market data, order books, recent trades, and OHLCV from Coinbase exchange via CCXT integration.
Provides real-time market data, order books, recent trades, OHLCV, and funding rates from OKX exchange via CCXT integration.
Provides DeFi data such as protocol TVL, yield pools, and DEX volume on the Solana blockchain via DefiLlama integration.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@coin-mcpWhat is Bitcoin trading at right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
coin-mcp
English · 中文
A comprehensive cryptocurrency market-data MCP server. Six data sources, 49 tools, 8 prompt templates, 3 resources — wired together so an LLM can answer almost any "what's the market doing?" question with a single call.
Table of contents
Related MCP server: Enterprise Crypto MCP Gateway
Why coin-mcp
Most crypto MCP servers are thin wrappers around a single API and hit a wall the moment a user asks anything that requires combining sources. coin-mcp is built around a different premise: a strong AI assistant needs complementary data sources behind one consistent contract.
Source | Strength | What it covers here |
CoinGecko | Aggregated, volume-weighted | Price, market cap, history, NFTs, categories, treasuries, trending, search |
CCXT | Real-time, per-exchange | Tickers, order books, recent trades, OHLCV, funding rates across 100+ exchanges |
DefiLlama | DeFi-native, free | Protocol/chain TVL, stablecoins, yield pools, DEX volume, fees & revenue |
DexScreener | DEX-side, long-tail tokens | Pairs, liquidity, prices for tokens too small/new for CoinGecko |
Alternative.me | Sentiment | Crypto Fear & Greed Index |
Local TA | Offline compute | RSI, MACD, Bollinger, EMA/SMA, ATR, ADX, Stochastic, OBV |
Plus a tiered HTTP cache that keeps you safely under CoinGecko's free-tier rate limit, and a multi-transport runtime (stdio / SSE / streamable-HTTP).
What it can answer
A non-exhaustive sample of questions a connected LLM can resolve in 1–3 tool calls:
"What is BTC trading at right now?" →
get_price"Compare BTC's price across Coinbase, Kraken, OKX and DexScreener and tell me the spread." →
compare_prices"Give me a 30-day chart and run RSI, MACD and Bollinger on it." →
get_market_chart+compute_indicators"Where is the best bid for ETH/USDT across exchanges?" →
get_consolidated_orderbook"Funding rates for the BTC perp on Binance, OKX, Bybit, Bitmex — who's paying who?" →
compare_funding_rates"What protocols are leading TVL on Solana right now?" →
list_protocols(chain="Solana")"Find me yield pools paying > 10% APY on stablecoins with > $5M TVL." →
list_yield_pools"Is the market fearful or greedy today?" →
get_fear_greed_index"Is everything healthy? I'm seeing weird data." →
health_check"Which public companies hold BTC?" →
get_companies_holdings
Installation
Prerequisites
Python 3.10+ (
python3 --versionto check)Git
One of:
uv(recommended — handles Python toolchain, venv, lockfile in one tool)pip+ a virtualenv
uv install (one line, all platforms):
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
# powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows PowerShellOption 1 — uv (recommended)
git clone https://github.com/ymylive/coin-mcp.git
cd coin-mcp
uv sync # creates .venv, installs from uv.lock
uv run coin-mcp # starts the server on stdiouv sync reads pyproject.toml + uv.lock and installs everything (mcp, httpx, ccxt) into a project-local .venv/. No system pollution.
Option 2 — pip + venv
git clone https://github.com/ymylive/coin-mcp.git
cd coin-mcp
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e . # editable install, deps resolved fresh
coin-mcp # starts the server on stdioOption 3 — install directly from GitHub (no clone)
uv tool install git+https://github.com/ymylive/coin-mcp.git
coin-mcp # available on PATHThis puts the coin-mcp console script on your PATH globally without cluttering any project directory. Best for "I just want to point Claude Desktop at it."
Optional: install dev/test extras
If you want to run the test suite or hack on the code:
uv sync --extra dev # adds pytest + pytest-asyncio
uv run pytest # 29 tests, all should passVerify the installation
A 5-second sanity check that all tools registered correctly:
uv run python -c "
import asyncio, server
async def main():
tools = await server.mcp.list_tools()
prompts = await server.mcp.list_prompts()
resources = await server.mcp.list_resources()
print(f'{len(tools)} tools / {len(prompts)} prompts / {len(resources)} resources')
asyncio.run(main())
"
# Expected: 49 tools / 8 prompts / 3 resourcesCLI help is also one command away:
uv run coin-mcp --helpCommon pitfalls
Symptom | Likely cause / fix |
| Python 3.10+ not installed. Install via python.org or |
| You're not running inside the project venv. Use |
| Geographic block — not a bug. Use OKX, Kraken, Bybit, etc. instead via the |
| Rate-limited. The cache layer mitigates this; consider setting |
| Install uv first (see Prerequisites) or use the pip path (Option 2). |
Architecture
┌──────────────────────────────┐
│ LLM / MCP client │
│ Claude · Cursor · custom │
└──────────────┬───────────────┘
│ JSON-RPC over stdio / SSE / HTTP
┌──────────────▼───────────────┐
│ FastMCP server │
│ 49 tools · 8 prompts · 3 │
│ resources · multi-transport│
└──────────────┬───────────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
┌────────▼─────────┐ ┌────────▼────────┐ ┌────────▼────────┐
│ HTTP layer │ │ CCXT runtime │ │ Local compute │
│ httpx + tiered │ │ Bounded LRU │ │ Indicators │
│ TTL LRU cache │ │ + per-id RLock │ │ (no I/O) │
│ + auth-aware key │ │ + pre-warm │ │ │
└────────┬─────────┘ └────────┬────────┘ └─────────────────┘
│ │
┌────────────┼──────────────┐ │
▼ ▼ ▼ ▼
CoinGecko DefiLlama DexScreener 100+ exchanges
(Binance, OKX, Coinbase,
Kraken, Bybit, …)Key design choices:
One tool per endpoint, with rich AI-facing docstrings. No clever endpoint factories — the docstrings ARE the API contract that the LLM reads to decide which tool to call. Forty-nine docstrings is a feature, not a bug.
{"error": "..."}envelope contract. Every HTTP-backed tool returns either upstream JSON or an error envelope. The cache never caches errors. The LLM never raises.Path-injection guards on every URL-interpolated parameter. Coin IDs, protocol slugs, addresses are validated against strict regexes before any HTTP call.
Per-exchange RLock + pre-warmed
load_markets(). Concurrent CCXT calls don't race the lazy markets table.Auth-aware cache key. Header values for known auth headers are hashed into the cache key — multi-tenant deployments don't leak.
Tool catalog (49)
Aggregated market data — CoinGecko (18)
Tool | What it does |
| Current spot price for one or more coins, multi-currency |
| Full coin metadata: description, links, scores, market data, dev/community stats |
| Historical price / market cap / volume time series |
| Aggregated OHLC candlesticks across all venues |
| Exchange tickers for a coin, sorted by trust score / volume |
| Universal search across coins, exchanges, categories, NFTs |
| Top coins with full market data, sortable + paginated |
| Trending coins / NFTs / categories (last-24h searches) |
| Biggest 24h movers (Pro endpoint; falls back to |
| Total market cap, BTC/ETH dominance, # of active assets |
| Global DeFi market cap and DeFi-to-ETH ratio |
| All coin categories with aggregated market data |
| Centralized exchanges directory ranked by trust score |
| Single-exchange detail: description, links, tickers |
| Derivatives venues by open interest / volume |
| NFT collections sortable by floor / cap / volume |
| Single NFT collection detail |
| Public companies holding BTC or ETH |
Real-time per-exchange — CCXT (7)
Tool | What it does |
| All 111 CCXT-supported exchange IDs |
| All markets/symbols on a specific exchange |
| Real-time bid/ask/last/24h on one exchange |
| Level-2 order book snapshot |
| Recent public trades (the tape) |
| OHLCV candles, 1m granularity, per-exchange volume |
| Current perpetual-futures funding rate |
Derivatives extensions — CCXT (3)
Tool | What it does |
| Time-series funding rates for a perp |
| Current open interest with |
| Cross-exchange funding-rate snapshot with max/min/spread |
DeFi-native — DefiLlama (9)
Tool | What it does |
| All DeFi protocols ranked by TVL, sortable, chain-filterable |
| Single protocol detail with trimmed TVL history |
| TVL per chain |
| Historical TVL for a chain (or total DeFi) |
| Top stablecoins by mcap with chain breakdown |
| Yield pools filtered by TVL / project / chain / symbol |
| DEX 24h volume rankings |
| Protocols ranked by fees or revenue |
| DefiLlama oracle price for |
DEX-side — DexScreener (5)
Tool | What it does |
| Search pairs across all chains by token name/symbol/address |
| All pairs for a token contract address |
| Single pair detail by chain + pair address |
| Newly profiled DexScreener tokens |
| Currently top-boosted (paid promotion) tokens |
Cross-source aggregation (3)
Tool | What it does |
| Parallel-ping every data source with latency |
| Same coin's price across CG + multiple CEX + DEX with spread |
| Merged L2 across many exchanges, attributed per-level |
Sentiment (1)
Tool | What it does |
| Crypto Fear & Greed Index (0 = extreme fear, 100 = extreme greed) |
Local technical indicators (1)
Tool | What it does |
| RSI, MACD, Bollinger, EMA, SMA, ATR, ADX, Stochastic, OBV — pure-Python on supplied OHLCV |
Cache observability (2)
Tool | What it does |
| Cache entries, hits, misses, hit rate, per-pattern breakdown |
| Drop the in-process HTTP cache |
Prompt templates (8)
Prompts are parameterized workflows the user can pick from a UI; they expand into ready-made multi-step instructions the LLM executes using tools.
Prompt | What it does |
| Full coin briefing: identity, price, charts, where it trades |
| Side-by-side comparison across N coins |
| Fetch OHLCV + run full indicator bundle, summarize trend/momentum/volatility |
| Funding rates across N exchanges, surface spread |
| Macro briefing: cap, dominance, sentiment, trending, top movers |
| TVL by chain + per-protocol view + stablecoin landscape |
| Search → fall back to DexScreener for new/long-tail tokens |
| Filter yield pools by TVL / chain / asset, sort by 30-day avg APY |
Resources (3)
Static reference data the client can attach to the LLM's context:
coin-mcp://exchanges/ccxt— JSON list of all CCXT-supported exchange IDscoin-mcp://coins/popular-ids— markdown table mapping common ticker symbols to CoinGecko IDscoin-mcp://chains/dex-supported— markdown list of chain IDs DexScreener accepts
Configuration
All env vars are optional.
Variable | Default | Effect |
| (unset) | When set, the server uses the Pro endpoint and authenticates requests. Pro keys (prefixed |
A .env.example is provided. Copy to .env and edit if you have a key.
MCP client integration
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"coin-mcp": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/coin-mcp",
"run",
"coin-mcp"
],
"env": {
"COINGECKO_API_KEY": "your-optional-key"
}
}
}
}Restart Claude Desktop. The 49 tools, 8 prompts and 3 resources will appear.
Cursor
Cursor's MCP support uses the same JSON shape. Place the snippet in your Cursor settings under mcp.servers. For remote use, run the server with --transport sse or --transport streamable-http and point Cursor at the URL.
Custom client
Any MCP-compatible client works. The server speaks the standard MCP JSON-RPC over your transport of choice.
Transports
# stdio (default, for local IDE / Claude Desktop integration)
coin-mcp
# Server-Sent Events
coin-mcp --transport sse --host 127.0.0.1 --port 8000
# Streamable HTTP (for hosted / remote use)
coin-mcp --transport streamable-http --host 127.0.0.1 --port 8000
# Public bind (with no auth) — REQUIRES explicit flag and prints a stderr WARNING
coin-mcp --transport streamable-http --host 0.0.0.0 --port 8000 --allow-publicThere is no built-in authentication. If you bind to a non-loopback host, put a reverse proxy with auth in front (Caddy, nginx, Traefik, Cloudflare Access, etc.) or restrict via firewall. The --allow-public flag is a deliberate footgun guard.
Caching layer
A tiered TTL cache sits transparently behind every HTTP call so the LLM can fan out without burning your CoinGecko quota.
Endpoint pattern | TTL |
| 10 s |
| 60 s |
| 60 s |
| 30 s |
| 60 s |
| 5 min |
| 60 s |
| 2 min |
| 5 min |
| 10 min |
| 30 min |
| 10 min |
| 5 min |
| 30 min |
| 30 min |
| 10 min |
default | 30 s |
LRU-bounded at 2,000 entries. Cache key includes the URL, sorted query params, and a sha-256 digest of any auth header values — so two clients with different keys never share a cache entry. Errors are never cached. Hits return a deep copy so callers can mutate without poisoning. Inspect at runtime via the cache_stats MCP tool.
Security model
coin-mcp is data-only — there is no transaction signing, no private-key handling, no on-chain writes. The threat surface is therefore narrow but worth being honest about:
Path-injection guards on every URL-interpolated parameter (coin IDs, slugs, addresses). Invalid input returns
{"error": "invalid <kind>"}without making the HTTP call.compute_indicatorsrow cap at 5,000 (MAX_OHLCV_ROWS) prevents memory blowups from prompt-injected upstream data.CCXT exchange cache bounded (LRU 16) so an LLM can't force allocation of all 111 exchanges.
Network transports refuse non-loopback bind without
--allow-publicand emit a stderr WARNING when the flag is given.Cache key is auth-aware — auth headers contribute to the key via sha-256 digest. Multi-tenant safe.
No emoji of stdout in stdio mode — every log goes to stderr, so JSON-RPC framing is never corrupted.
If you find a security issue, please open an issue rather than a PR for non-trivial cases.
Project structure
coin-mcp/
├── server.py # Entrypoint — wires modules together
├── pyproject.toml
├── README.md
├── .env.example
├── .gitignore
├── coin_mcp/
│ ├── core.py # FastMCP instance, helpers, instructions block
│ ├── coingecko.py # 18 CoinGecko tools
│ ├── ccxt_tools.py # 7 CCXT tools
│ ├── derivatives.py # 3 funding/OI tools
│ ├── defillama.py # 9 DefiLlama tools
│ ├── dexscreener.py # 5 DexScreener tools
│ ├── aggregate.py # 3 cross-source tools
│ ├── sentiment.py # 1 Fear & Greed tool
│ ├── indicators.py # 1 local-compute tool
│ ├── cache.py # 2 cache-introspection tools + the cache itself
│ ├── prompts.py # 8 workflow templates
│ ├── resources.py # 3 static-reference resources
│ └── transport.py # CLI for stdio / SSE / streamable-HTTP
└── tests/
├── conftest.py # Autouse cache-clear + mcp_server fixture
├── test_registry.py # Tool count / instructions / prompt-ref sanity
├── test_cache_routing.py # TTL routing table + no-shadowing
├── test_indicators.py # Wilder RSI textbook vector, 5-col fallback, DoS cap
├── test_http_envelope.py # is_error truthy semantics + error not cached
└── test_validators.py # Path-injection rejection (CG/DexScreener)Testing
uv sync --extra dev
uv run pytest
# 29 passedThe high-ROI tests cover:
Every registered tool appears in the
instructionstable (LLM discoverability)Every prompt body references only real tool names and real parameters
Cache TTL routing for 17 representative URLs
Cache no-shadowing (
/coins/marketsvs/coins/{id}vs/market_chart)Wilder RSI matches the textbook 14-close reference vector (~70.46)
5-column OHLCV input doesn't crash OBV
compute_indicatorsrejects > 5,000 rowsis_errortruthy semanticsHTTP error responses are not cached
Path-injection on CoinGecko / DexScreener tools is rejected before any HTTP call
Roadmap
Tracked but not yet built:
Whale-transaction monitoring (Whale Alert)
Etherscan / blockchain-explorer-style read-only RPC
News + social aggregation (CryptoPanic / Santiment)
Aggregated open-interest history (cross-exchange)
Optional READ-ONLY signed requests for higher-tier API keys
If you have a specific data source you want integrated, open an issue with the API spec.
License
MIT — see LICENSE for the full text.
Acknowledgments
This project stands on shoulders.
Model Context Protocol — Anthropic's open standard for AI ↔ tool wiring
CoinGecko API — the most generous free crypto-data tier on the internet
CCXT — the unified exchange library that makes 100+ venues feel like one
DefiLlama — DeFi data infrastructure as a public good
DexScreener — DEX-side market data with no auth required
Alternative.me — the Crypto Fear & Greed Index
And all the prior MCP-server projects whose design choices we studied: doggybee/mcp-server-ccxt for the tiered cache pattern, QuantGeekDev/coincap-mcp for showing prompts matter, heurist-network/heurist-mesh-mcp-server for multi-transport precedent, the official CoinGecko MCP for dynamic tool discovery as an idea worth pursuing later.
Available Tools
49 toolscache_statsA
Return current HTTP-cache statistics.
Reach for this when:
The user asks why a price/value looks stale or is identical to a previous query (responses may be served from cache up to the per-endpoint TTL).
You're debugging rate-limit (HTTP 429) errors and want to confirm the cache is doing its job.
The user explicitly asks about cache utilization or hit rate.
Returns: Dict with keys: entries: number of live cached entries max_entries: LRU eviction threshold hits, misses, sets, errors: cumulative counters since process start hit_rate: hits / (hits + misses), 0.0 if no requests yet by_pattern: per-endpoint-pattern breakdown of the same counters
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavior: it notes cache may serve stale data up to TTL, counters are cumulative since process start, and provides detailed return structure. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a brief line, bulleted usage cases, and a clear dict description. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with output schema, the description fully covers purpose, usage, behavior, and return format. It is self-contained and complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema (baseline 4). Description does not need to explain parameters but adds value by detailing the output structure, which is not covered by schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns HTTP-cache statistics with specific verb 'Return' and resource 'current HTTP-cache statistics'. It distinguishes from siblings like clear_cache.
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 'Reach for this when' bullet points list three scenarios, guiding when to use this tool over alternatives, e.g., when debugging rate-limit errors or checking cache utilization.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_cacheA
Drop every entry from the HTTP cache.
Reach for this when:
The user explicitly asks to refresh / invalidate cached data.
You suspect cached data is materially stale and a TTL has not yet expired (e.g. user reports a price that disagrees with their exchange).
Prefer letting TTLs expire naturally; this tool resets ALL endpoints, not just one. Counters (hits/misses/...) are preserved.
Returns: {"cleared": }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses full effect (drops all entries, preserves counters, returns count). Without annotations, description carries burden; it adequately covers main behaviors. Minor omission: no mention of permissions or performance implications, but given simplicity, still 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?
Efficiently structured: purpose, usage guidelines, caution, return format. Every sentence earns its place; no fluff. Front-loaded with core action.
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?
Fully covers tool behavior, when to use, and return format. Given 0 parameters and presence of output schema, no missing information. Context regarding sibling tools (cache_stats) is implied.
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?
No parameters in schema, so description adds value by explaining output format and tool purpose. Baseline for 0 params is 4; description also provides output schema in prose.
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?
Explicitly states 'Drop every entry from the HTTP cache' with specific verb and resource. Emphasizes it resets ALL endpoints, distinguishing it from siblings like cache_stats and other data-fetching tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'Reach for this when' criteria with two clear scenarios (explicit user request, suspected stale data). Advises preferring natural TTL expiry, giving clear boundaries on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_funding_ratesA
Compare the current funding rate for one perp across multiple exchanges, in parallel.
Use this to find funding-rate arbitrage opportunities (long the venue
paying you, short the venue charging you) or to gauge how lopsided
positioning is across the market. The spread_bps field is
(max - min) * 10000 and tells you how big the dispersion is in basis
points. For a single exchange snapshot use get_funding_rate; for
historical trend on one venue use get_funding_rate_history.
Symbol convention: linear USDT-margined perps use "BTC/USDT:USDT" on
most venues. BitMEX's flagship is the inverse contract "BTC/USD:BTC", so
if you pass a USDT linear symbol the BitMEX branch will return an error
inline — that's expected. Branches that fail (unsupported symbol, geo-
block, rate limit) return {"exchange": ..., "error": ...} rather than
sinking the whole call.
Args: symbol: CCXT unified perp symbol. Default "BTC/USDT:USDT". exchange_ids: Comma-separated CCXT exchange IDs. Default "binance,okx,bybit,bitmex".
Returns:
{"symbol", "rates": [...], "max", "min", "spread_bps", "n_ok", "n_error"}. Each rate row is either
{"exchange", "fundingRate", "nextFundingTimestamp", "markPrice"}
on success or {"exchange", "error"} on failure. max/min/
spread_bps are populated only when at least two branches returned
numeric fundingRate values.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | BTC/USDT:USDT | |
| exchange_ids | No | binance,okx,bybit,bitmex |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that failed branches return error inline, explains spread_bps computation, and warns about BitMEX linear symbol errors. Missing explicit mention of rate limits or authentication, but otherwise thorough.
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-structured with bold summary, use cases, symbol details, arguments, and return format. Every sentence adds value; slightly lengthy but appropriate for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 2 simple parameters, description covers all aspects: arguments, failure behavior, return fields. Complete for the tool's complexity.
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?
Input schema has 0% description coverage. Description adds essential meaning: symbol convention (CCXT unified perp), default values, exchange_ids format (comma-separated), and notes about BitMEX. Also describes return structure, fully compensating for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'compare' and resource 'funding rates'. Explicitly distinguishes from siblings: 'For a single exchange snapshot use get_funding_rate; for historical trend on one venue use get_funding_rate_history.'
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 (arbitrage opportunities, lopsided positioning) and when-not-to (single exchange, historical). Includes examples of expected behavior for specific exchanges like BitMEX.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_pricesA
Concurrently fetch the price of one coin from many sources and compare.
Use for cross-source sanity checks, finding venue-vs-aggregator divergences, or simple arbitrage spotting. Contrast with:
get_price: single source (CoinGecko aggregated).compare_funding_rates: perp funding across venues.
Sources fanned out in parallel:
CoinGecko aggregated
/simple/priceFor each
exchange_id: CCXTfetch_ticker(base/quote)where base is derived fromcoin_idvia a small mapping (bitcoin->BTC, ethereum->ETH, solana->SOL, ripple->XRP, cardano->ADA, dogecoin->DOGE, tron->TRX, polkadot->DOT, chainlink->LINK, avalanche-2->AVAX, matic-network->MATIC) and quote isUSDTforvs_currency=usd, elsevs_currency.upper().DexScreener (only when
vs_currencyis "usd"): top-liquidity pair.
Args: coin_id: CoinGecko coin ID (e.g. "bitcoin"). vs_currency: Quote currency. "usd" works on all sources; others skip DexScreener. exchange_ids: Comma-separated CCXT exchange IDs.
Returns:
Object with coin_id, vs_currency, prices (per-source array with
source, ok, and either price or error), max, min,
spread_bps, n_ok, n_error. Unknown coin_ids still return
per-source error envelopes pointing at get_exchange_ticker.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_id | No | bitcoin | |
| vs_currency | No | usd | |
| exchange_ids | No | binance,okx,coinbase,kraken |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses behavior: parallel fan-out to CoinGecko, CCXT per exchange, DexScreener; per-coin mapping; error handling; return structure including max/min/spread. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, but slightly verbose (lists exchanges and coin mapping in prose). Front-loaded with purpose, but could trim some redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive coverage: input/output description, source details, edge cases (unknown coin_ids), and output schema exists for return values. No gaps for effective agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description explains all three parameters: coin_id (CoinGecko ID), vs_currency (quote currency with special handling), exchange_ids (comma-separated CCXT IDs). Adds defaults and usage details beyond 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?
Description clearly states the tool fetches prices from many sources concurrently and compares them. It explicitly differentiates from siblings like `get_price` (single source) and `compare_funding_rates` (perp funding).
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 usage guidance: cross-source sanity checks, finding divergences, arbitrage spotting. Contrasts with sibling tools and explains conditions (e.g., DexScreener only for 'usd'), enabling appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_indicatorsA
Compute technical indicators on OHLCV candles you have already fetched.
USE THIS WHEN: you have OHLCV data (from get_exchange_ohlcv for one
specific exchange, or get_aggregated_ohlc for a CoinGecko cross-venue
aggregate) and you want RSI / MACD / Bollinger / EMA / SMA / ATR / ADX /
Stochastic / OBV without writing the math yourself.
THIS TOOL DOES NOT FETCH DATA. The caller must provide candles. If you
need candles first, call get_exchange_ohlcv (CCXT, per-venue, supports
1m candles) or get_aggregated_ohlc (CoinGecko, market-aggregate, daily/
hourly).
THIS TOOL RETURNS OBSERVATIONS, NOT TRADING ADVICE. The signal_summary
field describes what the indicators currently show (e.g. "RSI 72 —
overbought"). It never recommends buying or selling.
Input format:
ohlcv: list of rows. Either
6 columns: [timestamp_ms, open, high, low, close, volume] (CCXT)
5 columns: [timestamp_ms, open, high, low, close] (CoinGecko aggregated_ohlc — no volume)
Rows must be ordered oldest -> newest. With 5-column input, OBV is
unavailable (returned as null with a note).
Args:
ohlcv: Candles, oldest first. 5 or 6 columns per row.
indicators: Which indicators to compute. Any subset of
["rsi", "macd", "bollinger", "ema", "sma", "atr", "adx",
"stochastic", "obv"]. Default omits adx/stochastic/obv to keep
output compact; pass them explicitly to opt in.
rsi_period: Lookback for Wilder's RSI. Default 14.
macd_fast / macd_slow / macd_signal: MACD EMA periods. Defaults 12/26/9.
bb_period / bb_stddev: Bollinger Bands lookback and stddev multiplier.
Defaults 20 and 2.0.
ema_periods: List of EMA lookbacks to compute. Default [12,26,50,200].
sma_periods: List of SMA lookbacks to compute. Default [20,50,200].
atr_period: Wilder ATR lookback. Default 14.
stoch_k_period / stoch_d_period: Stochastic %K and %D periods.
Defaults 14 and 3.
adx_period: Wilder ADX lookback. Default 14.
include_series: If True, return the full per-bar series for every
indicator (suitable for charting). If False (default), return
only the latest value per indicator — much smaller payload.
When True and the input has more than MAX_SERIES_RETURN (1000)
rows, each returned series is truncated to the last
MAX_SERIES_RETURN entries and truncated_series_to is set on
the response so the caller can tell.
Bounds:
The input is rejected with an error if it has more than
MAX_OHLCV_ROWS (5000) rows — pass the most recent N bars or split
into chunks. This guards against pathological / prompt-injected
inputs whose ADX/Stochastic passes and JSON serialization would
otherwise dominate runtime and memory.
Returns:
Dict with one key per requested indicator plus:
- meta: { bar_count, has_volume, last_timestamp_ms, last_close }
- signal_summary: human-readable interpretation per indicator
(observations only — overbought / oversold / trend direction etc.)
Per-indicator shape:
- rsi: { latest, period, series? }
- macd: { latest: { macd, signal, histogram }, params, series? }
- bollinger: { latest: { upper, middle, lower }, period, stddev,
percent_b, bandwidth, series? }
- ema: { latest: { "12": ..., "26": ... }, periods, series? }
- sma: { latest: { "20": ..., "50": ... }, periods, series? }
- atr: { latest, period, series? }
- adx: { latest: { adx, plus_di, minus_di }, period, series? }
- stochastic: { latest: { k, d }, k_period, d_period, series? }
- obv: { latest, series? } # null + note if no volume column
| Name | Required | Description | Default |
|---|---|---|---|
| ohlcv | Yes | ||
| indicators | No | ||
| rsi_period | No | ||
| macd_fast | No | ||
| macd_slow | No | ||
| macd_signal | No | ||
| bb_period | No | ||
| bb_stddev | No | ||
| ema_periods | No | ||
| sma_periods | No | ||
| atr_period | No | ||
| stoch_k_period | No | ||
| stoch_d_period | No | ||
| adx_period | No | ||
| include_series | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavioral traits: no data fetching, returns observations only, input bounds (5000 rows), volume handling, series truncation, and default indicator set. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and front-loaded purpose, but is quite verbose. Could be slightly more concise while retaining completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (15 parameters, no output schema), the description is remarkably complete: covers input restrictions, output shape for every indicator, limitations, and edge cases like missing volume or series truncation.
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 0% schema coverage, the description explains every parameter in detail: ohlcv format and ordering, indicator list with defaults, all period parameters with defaults, and include_series behavior including truncation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes technical indicators on provided OHLCV data, and distinguishes it from data-fetching sibling tools like get_exchange_ohlcv and get_aggregated_ohlc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides 'USE THIS WHEN' clause and directs to sibling tools for data fetching, with clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dex_searchA
Search DEX pairs across all chains by token name, symbol, or address.
Use this when the token is too new or small for CoinGecko (get_price
returns empty), or when the user wants DEX-side / on-chain prices
specifically. Returns the most-liquid matching pairs first so the top
result is usually the "real" market for the token.
Args: query: Free-text query — token name ("BasedPepe"), ticker ("PEPE"), or contract address. DexScreener returns up to 30 pairs per call. limit: Max pairs to return after sorting by USD liquidity desc (1..30).
Returns:
Array of trimmed pair objects with fields:
chainId, dexId, pairAddress, url, baseToken{address,name,symbol},
quoteToken{...}, priceNative, priceUsd, liquidityUsd, volumeH24,
priceChangeH24, fdv, marketCap, pairCreatedAt.
On API failure returns {"error": "..."} from the HTTP layer.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does well by disclosing that it returns most-liquid pairs first, up to 30 per call from DexScreener, and specifies error handling ('On API failure returns {"error": "..."}'). Missing mentions of rate limits or auth, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, usage condition, and then Args/Returns sections. It is appropriately detailed but could be slightly more concise; still, every sentence adds 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?
Given no output schema, the description lists all return fields. It covers purpose, usage, parameters, and return format thoroughly. For a search tool with two parameters, it is fully contextual and leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds rich meaning: query parameter is free-text with examples, and limit parameter explains it's after sorting by liquidity with range 1-30. This exceeds what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches DEX pairs across all chains by token name, symbol, or address, using a specific verb and resource. It distinguishes from siblings like get_price and get_token_dex_price by noting it returns DEX-side/on-chain prices and most-liquid pairs first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: when the token is too new or small for CoinGecko (get_price returns empty) or when the user wants DEX-side/on-chain prices. This provides clear guidance and differentiation from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aggregated_ohlcA
Get aggregated OHLC (open/high/low/close) candlestick data across all exchanges.
Use for technical-analysis-style candlestick views of "the market" rather
than a single venue. For per-exchange high-granularity candles (1m, 5m, etc.),
use get_exchange_ohlcv (CCXT) instead.
Candle width auto-selected by CoinGecko based on days:
days = 1 -> 30-minute candles
days in {7, 14, 30} -> 4-hour candles
days in {90, 180, 365, max} -> daily candles
Args: coin_id: CoinGecko coin ID. vs_currency: Quote currency (e.g. "usd"). days: Window in days. One of "1","7","14","30","90","180","365","max".
Returns: Array of [unix_ms, open, high, low, close] tuples.
Note: coin_id is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_id | Yes | ||
| vs_currency | No | usd | |
| days | No | 30 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description explains candle width auto-selection based on days parameter and return format. Lacks details on error handling or rate limits, but covers main behavioral traits sufficiently.
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-structured with clear sections, front-loaded purpose, and concise sentences. Every sentence adds value without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive given no output schema and three parameters: explains purpose, usage, parameter details, return format, and validation. Sufficient for an AI 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 0%, so description compensates by explaining all three parameters: coin_id validation pattern, vs_currency example, and days with mapping to candle widths. Could add more detail on vs_currency.
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?
Clearly states it gets aggregated OHLC candlestick data across all exchanges, with specific verb and resource. Distinguishes from sibling get_exchange_ohlcv for per-exchange data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises use for technical-analysis-style views of the market rather than a single venue, and directs to get_exchange_ohlcv for per-exchange high-granularity candles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chain_tvl_historyA
Get historical total DeFi TVL for one chain, or for all of DeFi combined.
Use to chart "Ethereum TVL over the last year" or "how has total DeFi TVL
evolved?" Complements CoinGecko's get_global_defi, which only gives a
single current number with no history.
Args:
chain: Chain name from list_chains_tvl (e.g. "Ethereum", "Solana",
"Base", "Arbitrum"). Empty string returns total TVL across ALL of
DeFi (i.e. all chains combined).
days: Number of trailing daily points to return (1..3650). Default 90.
Returns:
Array of {date, tvl} points, where date is a unix epoch seconds
timestamp at UTC midnight and tvl is the chain's total DeFi TVL in
USD on that day.
Note: chain (when non-empty) is validated against
^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | ||
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return format (array of {date, tvl}) and parameter behavior (empty chain for total). Without annotations, description covers key aspects but lacks info on caching or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with clear Args/Returns sections, no redundant information. Every sentence adds 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?
Complete for a simple tool: explains return format, all parameters with defaults and constraints, and references a sibling tool. No output schema, but description fills the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds substantial meaning beyond schema: chain empty for combined TVL, days range 1-3650, default 90, and regex validation. Schema coverage is 0%, but description fully compensates.
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?
Clearly states the tool retrieves historical TVL for one chain or all DeFi combined, with specific verb 'Get' and resource 'historical total DeFi TVL'. Distinguishes from sibling 'get_global_defi' by noting it complements that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage examples ('Ethereum TVL over the last year') and contrasts with 'get_global_defi' (only current number). Also specifies parameter constraints like chain validation and days range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coin_detailsA
Get rich metadata for a single coin: description, links, scores, market data, dev/community stats.
Use this when the user wants to learn about a coin (what is it, who built it, links to docs/source/socials), or when you need scores like CoinGecko rank, sentiment up/down vote percentages, or developer activity.
For just the price, use get_price (much cheaper).
Args:
coin_id: CoinGecko coin ID, e.g. "bitcoin".
localization: Include localized names/descriptions for many languages.
Usually false to keep responses small.
tickers: Include a tickers array (large). Use get_coin_tickers instead
when you specifically want exchange tickers.
market_data: Include current price, market cap, 24h/7d/30d/1y change,
ATH/ATL, supply, etc. Recommended.
community_data: Twitter/Reddit/Telegram follower counts and growth.
developer_data: GitHub stars, forks, commit counts, PR activity.
Returns:
A coin object with fields like id, symbol, name, description,
links, image, market_cap_rank, market_data, community_data,
developer_data, categories, genesis_date, etc.
Note: coin_id is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_id | Yes | ||
| localization | No | ||
| tickers | No | ||
| market_data | No | ||
| community_data | No | ||
| developer_data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It comprehensively details the return object fields and notes coin_id validation via regex. Though it does not explicitly state read-only nature, the return-focused description implies no side effects. The level of detail is high, but a slight omission of safety traits like 'does not modify data' prevents 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?
The description is well-structured with clear sections: purpose, usage guidelines, parameter details, return description, validation note. It is slightly long but each part adds value. Could be tightened by merging the initial purpose with the usage context, but current structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, no output schema, and many sibling tools, the description is quite complete. It explains all parameters, defines when to use alternatives, and outlines return fields. Lacks mention of rate limits or pagination, but those may be less critical for a single-entity retrieval tool. The validation note adds extra completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning no descriptions in the schema itself. The description compensates fully by explaining each parameter: format example for coin_id, purpose of localization ('Usually false to keep responses small'), tickers warning ('large'), and scope of market_data, community_data, developer_data. This adds substantial meaning beyond the schema's bare names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get rich metadata for a single coin: description, links, scores, market data, dev/community stats,' which clearly identifies the verb ('Get') and resource ('rich metadata for a single coin'), and lists specific data categories. It also distinguishes from sibling tools like get_price and get_coin_tickers, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when the user wants to learn about a coin... or when you need scores like CoinGecko rank, sentiment up/down vote percentages, or developer activity.' Provides clear exclusion: 'For just the price, use get_price (much cheaper)' and for tickers: 'Use get_coin_tickers instead.' This offers concrete alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coin_tickersA
List exchange tickers (trading pairs) for a single coin across many venues.
Use to answer "where can I buy/sell X?" or "which exchanges have the best liquidity for X?" Each ticker includes price, volume, bid-ask spread, converted last/volume in BTC/ETH/USD, and CoinGecko's trust score.
Args:
coin_id: CoinGecko coin ID.
exchange_ids: Optional comma-separated exchange IDs to filter by
(CoinGecko exchange IDs, see list_exchanges_directory).
page: Pagination page (each page is up to 100 tickers).
order: Sort order. Default ranks by liquidity trust score.
Returns:
Object with name (coin name) and tickers (array of ticker objects).
Note: coin_id is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_id | Yes | ||
| exchange_ids | No | ||
| page | No | ||
| order | No | trust_score_desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return data (price, volume, spread, etc.), pagination, and ordering, but no annotations are provided so some behavioral aspects like rate limits are missing.
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?
Succinct top line, followed by usage examples, structured args/returns/note. No unnecessary 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 all parameters, return structure, and validation note. No output schema, but description provides sufficient context for an agent.
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?
Despite 0% schema coverage, the description explains every parameter, including default values, validation, and relationship to other tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists exchange tickers for a single coin across many venues, with specific use cases and data included.
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 clear when-to-use guidance with example questions, but does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companies_holdingsA
Get public companies' BTC or ETH treasury holdings.
Useful for "which companies own BTC?" or "what's MicroStrategy's stack?" style questions, and for tracking institutional adoption.
Args: coin_id: Either "bitcoin" or "ethereum" — those are the only assets CoinGecko tracks for public-treasury data.
Returns:
Object with total_holdings, total_value_usd, market_cap_dominance,
and companies — an array of { name, symbol, country, total_holdings, total_entry_value_usd, total_current_value_usd, percentage_of_total_supply }.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_id | No | bitcoin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully outlines return structure (total_holdings, total_value_usd, market_cap_dominance, companies array with fields), and notes limitation to Bitcoin and Ethereum. No behavioral contradictions.
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?
Description is brief, front-loaded with purpose, and every sentence (including Args/Returns) provides essential information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter with enum and no output schema, the description fully covers usage, parameter, and return structure, leaving no gaps for the agent.
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?
Despite 0% schema coverage, the Args section explains coin_id's allowed values (bitcoin/ethereum) and the reasoning (only assets tracked), adding meaning beyond the enum and default in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves public companies' BTC/ETH treasury holdings with specific examples ('which companies own BTC?', 'MicroStrategy stack'), and differentiates from siblings which cover prices, markets, exchanges, etc.
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 concrete use cases (tracking institutional adoption) and implies applicability to Bitcoin/Ethereum treasury queries. No explicit when-not or alternatives given, but the examples make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_consolidated_orderbookA
Fetch L2 order books from many exchanges in parallel and merge into one virtual book.
Answers "where is the best bid/ask across the whole market?" — more useful
than per-venue get_orderbook for execution analysis. The merged book does
NOT aggregate by price level; each level retains its source exchange so the
LLM can attribute liquidity per venue.
Args:
symbol: CCXT unified symbol (e.g. "BTC/USDT"). Some exchanges may
reject the symbol (BadSymbol) — those go into exchanges_error.
exchange_ids: Comma-separated CCXT exchange IDs (capped at 10).
depth: Levels per side per exchange, clamped to [1, 50].
Returns: Object with: - symbol, depth_per_exchange - exchanges_ok: list of exchange ids that responded - exchanges_error: list of {exchange, error} for failures - bids: merged bids sorted by price desc, capped at depth*len(ok), each entry {price, amount, exchange} - asks: merged asks sorted by price asc, capped likewise - best_bid, best_ask: top of merged book with attribution - spread_bps: (best_ask - best_bid) / mid * 10000
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | BTC/USDT | |
| exchange_ids | No | binance,okx,bybit,kraken,bitstamp | |
| depth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description bears full responsibility. It discloses that the tool fetches in parallel, caps exchange_ids at 10, clamps depth to [1,50], does not aggregate by price level, and details the return structure including error handling for failed exchanges. This is comprehensive.
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 fairly long but well-structured with a purpose statement, usage hint, args block, and returns block. Every sentence adds value. Minor redundancy (explicitly listing args in a separate block) but overall efficient for the tool's complexity.
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 all aspects: purpose, when to use, parameter details, return format, error handling. Given the tool's parallelism and merging logic, the description provides enough context for correct selection and invocation. Output schema exists, so return details are appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains each parameter: symbol (CCXT unified format, example), exchange_ids (comma-separated, capped at 10, default), depth (levels per side, clamped, default). This adds meaning beyond the schema's defaults and types.
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?
Describes the tool as fetching L2 order books from multiple exchanges in parallel and merging them into one virtual book. It explicitly differentiates from the sibling tool `get_orderbook` by stating it is 'more useful than per-venue get_orderbook for execution analysis', and explains that the merged book retains source exchange information for liquidity attribution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the use case: answering 'where is the best bid/ask across the whole market'. It contrasts with `get_orderbook` and provides guidance on when to use this tool instead. Also mentions that some exchanges may reject the symbol, handling errors in `exchanges_error`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dex_pairA
Get full detail for a single DEX pair on a specific chain.
Use after dex_search / get_dex_token_pairs when the user wants the
full picture for one specific market — including buy/sell tx counts at
multiple windows (m5/h1/h6/h24), price changes, native-token price,
base/quote liquidity sides, and links/socials when present.
Args: chain_id: Chain identifier as DexScreener returns it. Typical values: "ethereum", "bsc", "solana", "polygon", "arbitrum", "base", "optimism", "avalanche", "pulsechain", "fantom", "cronos", ... pair_address: The pair's contract address (case-insensitive on EVM).
Returns:
The first matching pair object as returned by DexScreener (with the
full txns, info, volume, priceChange, liquidity sub-objects),
or {"error": "pair not found"} if no pair matches, or the structured
HTTP error dict on transport failure.
Note: chain_id is validated against ^[a-z0-9-]{1,32}$ and
pair_address against EVM hex / Solana base58.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | Yes | ||
| pair_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It details the return value structure, including sub-objects and error cases, and notes input validation. It does not discuss rate limits or authentication, but for a read operation these are acceptable omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear intro, Args, and Returns sections. It is concise yet complete, with every sentence adding value. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no annotations or output schema, the description covers all necessary aspects: purpose, usage context, parameter details, return format (including error cases), and validation. It is self-contained and comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates thoroughly: it explains chain_id with typical values and pair_address with case-insensitivity, and mentions validation regex patterns. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets full details for a single DEX pair on a specific chain, with explicit mention of what information is included (tx counts, price changes, liquidity). It distinguishes itself from siblings like dex_search and get_dex_token_pairs by indicating it is for a single pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use after dex_search / get_dex_token_pairs when the user wants the full picture for one specific market', providing clear guidance on when to invoke this tool. It does not mention when not to use it, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dex_token_pairsA
Get all DEX pairs trading a given token contract, across every chain.
Use this when you have an EVM/Solana contract address and want to see every venue where it's traded — useful for "which DEX has the deepest liquidity for this token?" and for finding the canonical pair on a specific chain. Pairs are returned sorted by USD liquidity desc.
Prefer this over dex_search when you already have the contract address;
prefer get_price (CoinGecko) when the token is large and listed on CEXes.
Args: token_address: Token contract address. EVM addresses like "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" (USDC on Ethereum) and Solana mint addresses both work. limit: Max pairs to return (1..30 typical). chain: Optional chain filter — only return pairs on this chain. Common values: "ethereum", "bsc", "solana", "polygon", "arbitrum", "base", "optimism", "avalanche". Leave empty for all chains.
Returns:
Array of trimmed pair objects (same shape as dex_search).
On API failure returns {"error": "..."}.
Note: token_address is validated against EVM hex or Solana base58
(rejects anything containing /, ?, #, .., %, or whitespace).
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | ||
| limit | No | ||
| chain | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses key behaviors: returns sorted by USD liquidity, validates token address, returns error on API failure. Could mention rate limits or data freshness, but sufficient for a read operation.
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-structured: purpose upfront, then usage, then param details, return format, validation note. Every sentence adds value; front-loaded with core function.
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 purpose, usage, parameters, return format, error handling, and validation. No output schema or annotations, but description is fully self-contained for a tool with 3 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description explains all three parameters with examples and allowed values (limit range, chain common values). Adds significant meaning beyond 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?
Clearly states the tool gets all DEX pairs for a given token contract across chains. Uses specific verb 'Get' and resource 'DEX pairs'. Distinguishes from siblings like dex_search and get_price in usage guidelines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using this over dex_search when contract address is known, and get_price for large CEX-listed tokens. Provides clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exchange_infoA
Get detailed info on a single exchange (CoinGecko directory): description, links, volume, top tickers.
Args:
exchange_id: CoinGecko exchange ID (e.g. "binance", "gdax", "kraken").
See list_exchanges_directory to discover IDs. NOTE: CoinGecko
exchange IDs sometimes differ from CCXT IDs (e.g. CoinGecko uses
"gdax" for Coinbase Pro).
Returns: Exchange object with name, year_established, country, description, url, image, trust score, volume metrics, and a tickers array.
Note: exchange_id is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that exchange_id is validated against a regex pattern and describes the returned object fields (name, year_established, country, description, url, image, trust score, volume metrics, tickers array). This is comprehensive, though it does not mention rate limits or authentication.
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 very concise, with a clear one-sentence summary followed by structured Args and Returns sections. Every sentence adds value, and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, no output schema), the description fully covers purpose, parameter semantics, and return values. It is complete enough for an agent to use the tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully explains the exchange_id parameter: its meaning (CoinGecko exchange ID), examples (binance, gdax, kraken), how to discover valid IDs (list_exchanges_directory), and a note about differing IDs. It also provides a validation regex. This adds immense value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed info on a single exchange (CoinGecko directory): description, links, volume, top tickers.' It specifies the action (get detailed info), the resource (single exchange), and the source (CoinGecko directory). This distinguishes it from sibling tools like get_exchange_markets and list_exchanges_directory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent how to find the exchange_id: 'See list_exchanges_directory to discover IDs.' It also warns about CoinGecko IDs differing from CCXT IDs. This provides clear context for when to use the tool, though it does not explicitly mention when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exchange_marketsA
List all trading pairs (markets) supported by a specific exchange.
Use to discover what symbols an exchange trades (e.g. "does Kraken list SOL/USDC?"), or to enumerate available perpetual contracts.
Args:
exchange_id: CCXT exchange ID (lowercase). See list_supported_exchanges.
active_only: If true, exclude delisted/inactive markets.
Returns:
Object with exchange, count, and markets — each market has
symbol, base, quote, settle, type (spot/swap/future/option),
linear, inverse, contract, active.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| active_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the effect of active_only parameter and details the return structure including fields like symbol, base, quote, settle, type, etc. This is transparent for a listing tool, though it omits potential authentication or rate limit implications.
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 concise and well-structured: purpose sentence, usage example, Args section with both parameters explained, and Returns section with object shape. No redundant information, and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, no output schema (but return described fully), and absence of annotations, the description is complete. It covers purpose, parameters, return type, and usage context, leaving no critical gaps for an agent to invoke 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?
Input schema defines two parameters (exchange_id, active_only). The description adds significant value: for exchange_id, it specifies 'CCXT exchange ID (lowercase)' and refers to list_supported_exchanges; for active_only, it explains 'If true, exclude delisted/inactive markets.' This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'trading pairs (markets) supported by a specific exchange.' It distinguishes from siblings like get_exchange_info (exchange metadata) and get_exchange_ticker (ticker prices) by focusing on market list discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use to discover what symbols an exchange trades... or to enumerate available perpetual contracts.' It also references list_supported_exchanges for valid exchange IDs. However, it does not explicitly state when not to use this tool or compare to alternatives like get_exchange_ticker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exchange_ohlcvA
Get OHLCV candlestick data from a specific exchange (high-granularity, including 1-minute candles).
Prefer this over get_aggregated_ohlc when:
the user asks about a specific venue, OR
they need sub-hour candles (1m/5m/15m), OR
they need exact volume on one exchange.
Args: exchange_id: CCXT exchange ID, e.g. "binance". symbol: Unified symbol, e.g. "BTC/USDT". timeframe: Candle width. Not every exchange supports every timeframe; common safe choices: "1m","5m","15m","1h","4h","1d". limit: Number of candles. Most exchanges cap at ~500-1500 per call. since_ms: Optional unix-millis lower bound. Most recent candles when null.
Returns: Array of [timestamp_ms, open, high, low, close, volume] tuples, oldest first.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes | ||
| timeframe | No | 1h | |
| limit | No | ||
| since_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that not every exchange supports every timeframe, and typical limit caps (500-1500 candles). It also describes the return format. However, it omits rate limits or potential cost of the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, followed by usage guidance, then parameter descriptions, and finally return format. Every sentence is informative, and the structure is logical and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description thoroughly covers purpose, usage guidelines, parameter semantics, and return format. It provides sufficient information for an agent to select and invoke the 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?
Despite 0% schema description coverage, the description explains each parameter in detail: exchange_id as CCXT exchange ID, symbol as unified format, timeframe with common safe choices, limit with typical caps, and since_ms behavior when null. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves OHLCV candlestick data from a specific exchange, noting high granularity including 1-minute candles. It distinguishes itself from the sibling tool `get_aggregated_ohlc` by specifying its use for a single venue and sub-hour timeframes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists conditions for preferring this tool over `get_aggregated_ohlc`: when the user asks about a specific venue, needs sub-hour candles, or requires exact volume on one exchange. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exchange_tickerA
Get a real-time ticker (bid/ask/last/24h stats) for one symbol on one exchange.
Use when the user asks about price on a specific venue ("BTC on Coinbase", "ETH on Binance") or wants tight bid-ask spread info.
Args: exchange_id: CCXT exchange ID, e.g. "binance". symbol: CCXT unified symbol, e.g. "BTC/USDT", "ETH/USD", "BTC/USDT:USDT" for a linear perp on Binance.
Returns:
Ticker object with symbol, timestamp, datetime, bid, ask,
last, high, low, open, close, vwap, baseVolume,
quoteVolume, percentage, change.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. While it mentions 'real-time' and the return fields, it lacks disclosure of behavioral traits such as rate limits, data source reliability, authentication requirements, or what happens if the exchange is unavailable. This is insufficient for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single-sentence purpose, followed by a usage guideline, then parameter details, and a returns list. Every sentence provides essential information with no redundancy or filler. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool simplicity (2 parameters, no output schema), the description is complete: purpose, usage, parameter semantics, and return fields are all covered. The return fields list compensates for the lack of output schema, and the context signals indicate no nested objects or enums, so no additional explanation is needed.
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 0% schema description coverage, the description adds crucial semantic information for both parameters: 'exchange_id' is explained as a CCXT ID with an example, and 'symbol' is described as a CCXT unified symbol with multiple examples including linear perpetual formats. This far exceeds the minimal schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get', the resource 'real-time ticker', and specifies the scope 'one symbol on one exchange'. It distinguishes from siblings by mentioning 'specific venue' and giving examples like 'BTC on Coinbase', which helps the agent select this tool over aggregated or multi-exchange alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage context: 'Use when the user asks about price on a specific venue' and includes examples. However, it does not explicitly mention when not to use the tool or list alternative siblings, though the guidance is clear and sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fear_greed_indexA
Get the Crypto Fear & Greed Index (0=extreme fear, 100=extreme greed).
A widely-quoted contrarian sentiment indicator that combines volatility, momentum, social media, surveys, BTC dominance and trend volume into a single 0-100 score. Useful for "are people fearful or greedy right now?" questions.
Args: limit: How many days of history to return (default 1 = today only, 0 = all history).
Returns:
Object with name, data (array of { value, value_classification, timestamp, time_until_update }), and metadata. Higher = greedier.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the index as a contrarian indicator, details the components (volatility, momentum, etc.), and specifies that higher values mean greedier. With no annotations, it provides sufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a clear purpose statement, context, and Args/Returns sections. It is efficient but slightly longer than necessary; still, every sentence adds 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?
Given the simplicity (one parameter, no output schema), the description fully covers usage, parameter semantics, and return format, including field details and interpretation. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description's Args section thoroughly explains the 'limit' parameter, including defaults and special value (0 = all history), adding meaning beyond the schema's type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the Crypto Fear & Greed Index, defines the 0-100 scale, and distinguishes it from sibling tools by focusing on a specific sentiment indicator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests use for 'are people fearful or greedy right now?' questions, indicating appropriate context. It does not explicitly exclude cases or mention alternatives, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funding_rateA
Get the current funding rate for a perpetual-futures contract on a specific exchange.
Funding rate is a periodic payment between longs and shorts that anchors perp prices to spot. Positive funding means longs pay shorts (crowd is long); negative funding means shorts pay longs.
Args: exchange_id: CCXT exchange ID that supports perps, e.g. "binance", "okx", "bybit", "bitmex". symbol: Perp symbol with settle suffix, e.g. "BTC/USDT:USDT" for the Binance USDT-margined linear perp, "BTC/USD:BTC" for an inverse perp.
Returns:
Funding info with symbol, markPrice, indexPrice, fundingRate,
fundingTimestamp, nextFundingRate, nextFundingTimestamp,
interestRate. Exact fields vary slightly by exchange.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the funding rate concept and notes that return fields vary by exchange, adding some transparency. However, without annotations, it fails to disclose rate limits, authentication requirements, or potential side effects (though the tool is clearly read-only). The behavioral disclosure is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, explanatory context, and explicit Args/Returns sections. It is front-loaded and contains no filler, though the funding rate explanation could be slightly condensed. Overall efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists return fields and notes variability. The two required parameters are fully described with examples. The tool is relatively simple, and the description provides sufficient context for correct invocation, though missing potential error handling or usage constraints.
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 description compensates for the schema's 0% coverage by providing concrete examples for exchange_id ('binance', 'okx', 'bybit', 'bitmex') and symbol ('BTC/USDT:USDT', 'BTC/USD:BTC'), adding meaning beyond the bare string type. This guides the agent effectively on parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource phrase 'Get the current funding rate for a perpetual-futures contract on a specific exchange,' which immediately distinguishes it from sibling tools like get_funding_rate_history (historical) and compare_funding_rates (comparison). The context about funding rate further clarifies the tool's domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for current rate but does not explicitly state when to use alternatives like get_funding_rate_history for historical data or compare_funding_rates for cross-exchange comparison. No exclusions or prerequisites are mentioned, leaving the agent to infer usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funding_rate_historyA
Get historical funding-rate time-series for a perpetual contract on one exchange.
Use this for trend analysis on funding — "is funding turning positive?",
"how long has BTC funding been negative?", spotting funding cycles, or
feeding a series into a quant signal. For the single most-recent snapshot
use get_funding_rate. For a cross-exchange comparison of the current
rate use compare_funding_rates.
The funding interval varies by venue: Binance and OKX charge funding every 8 hours, Bybit every 1 hour for some perps, BitMEX every 8 hours, etc. Returned timestamps reflect each charge. Don't assume a uniform cadence when comparing series across exchanges.
Args: exchange_id: CCXT exchange ID supporting perps, e.g. "binance", "okx", "bybit", "bitmex", "bitget", "bingx", "gate", "mexc", "kucoinfutures", "hyperliquid". symbol: Perp symbol with settle suffix. Linear (USDT-margined): "BTC/USDT:USDT". Inverse (coin-margined): "BTC/USD:BTC". since_ms: Optional unix-millis lower bound. If null, the exchange returns its default window (typically the most-recent N rows). limit: Max number of rows to return; clamped to [1, 1000].
Returns:
Array of rows oldest-first, each with timestamp (unix millis),
datetime (ISO 8601), symbol, fundingRate (e.g. 0.0001 = 1 bp),
and exchange-specific extras under info. On unsupported exchanges
returns {"error": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes | ||
| since_ms | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully bears the burden. It discloses varying funding intervals, timestamp behavior, default window, limit clamping, return format (oldest-first), and error handling on unsupported exchanges. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose, but it is slightly verbose with extensive examples in the exchange_id parameter list. Every sentence adds value, but a bit more conciseness could improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and moderate complexity, the description is comprehensive: covers usage context, parameter details, return fields, cadence caveats, and error responses. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates fully: it lists specific exchange IDs, explains symbol format with settle suffix examples, describes `since_ms` as optional unix-millis lower bound with default behavior, and notes `limit` clamping to [1,1000] with default 100.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves historical funding-rate time-series for a perpetual contract on one exchange. It distinguishes itself from siblings `get_funding_rate` (single snapshot) and `compare_funding_rates` (cross-exchange current rate), providing specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly specifies when to use (trend analysis, spotting cycles, quant signal) and when not (use `get_funding_rate` for single snapshot, use `compare_funding_rates` for cross-exchange current rate). It also warns about varying funding intervals by venue, offering clear guidance on when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_defiA
Get global DeFi market stats: total DeFi market cap, DeFi-to-Eth ratio, top DeFi coin by share.
For protocol-level TVL or chain-level breakdowns, use get_protocol_tvl
or list_chains_tvl (DefiLlama) instead — they're much more granular.
Returns:
Object with data containing defi_market_cap, eth_market_cap,
defi_to_eth_ratio, trading_volume_24h, defi_dominance,
top_coin_name, top_coin_defi_dominance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns an object with specific fields, implying a read-only operation. However, it does not mention data freshness, authentication requirements, or any potential rate limits, leaving gaps in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly concise, with two paragraphs: purpose and return fields, then usage guidelines. It includes a separate 'Returns:' section that repeats some information, which is slightly redundant but enhances clarity. Overall, it is well-structured and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, the description covers the tool's purpose, return data, and usage context sufficiently. It distinguishes from siblings and lists all return fields, making it nearly complete for its simple nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters (100% coverage), so no parameter description is needed. The description adds value by listing return fields, which compensates for the lack of an output schema. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves global DeFi market stats, listing specific data points like total market cap, DeFi-to-Eth ratio, and top coin by share. The verb 'Get' and resource 'global DeFi market stats' are explicit, and it distinguishes from sibling tools by referencing alternatives for granular data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance and names alternative tools (get_protocol_tvl and list_chains_tvl) for more granular protocol or chain-level breakdowns, helping an agent decide when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_marketA
Get global cryptocurrency market stats: total market cap, total 24h volume, BTC/ETH dominance.
Use for macro questions like "what's the total crypto market cap?", "is BTC dominance rising?", "how many coins exist?".
Returns:
Object with data containing:
- active_cryptocurrencies, upcoming_icos, ongoing_icos, ended_icos, markets
- total_market_cap (mapping of currency -> amount)
- total_volume (mapping of currency -> amount)
- market_cap_percentage (per-coin share of total cap, e.g. {"btc": 52.1})
- market_cap_change_percentage_24h_usd
- updated_at
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the return structure in detail and implies a read-only operation. No contradictions or missing behavioral traits.
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-structured with bullet points and example questions. Slightly verbose but each sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description fully explains return fields. No annotations but description compensates completely. Tool is simple (no params) and description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters defined, so schema coverage is 100%. Description adds meaning beyond schema by detailing the structure of the returned data object.
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?
Description clearly states the tool gets global cryptocurrency market stats, listing specific fields like total market cap and BTC/ETH dominance. It distinguishes from sibling tools by focusing on macro-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides example use cases ('macro questions') but does not explicitly state when not to use or mention alternatives. However, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_chartA
Get historical price, market cap and total volume time series for a coin.
Use this to draw line charts or compute returns/volatility over a window.
For candlestick (OHLC) data use get_aggregated_ohlc instead.
Granularity is auto-selected by CoinGecko based on days:
days <= 1 -> ~5-minute datapoints
days <= 90 -> ~hourly datapoints
days > 90 -> daily datapoints
Args: coin_id: CoinGecko coin ID (e.g. "bitcoin"). vs_currency: Quote currency (e.g. "usd", "eur", "btc"). days: Window in days. Examples: "1", "7", "14", "30", "90", "180", "365", or "max" for the full history. interval: Force daily granularity by passing "daily". Leave empty for auto.
Returns: Object with three arrays of [unix_ms, value] pairs: - prices - market_caps - total_volumes
Note: coin_id is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_id | Yes | ||
| vs_currency | No | usd | |
| days | No | 30 | |
| interval | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses granularity auto-selection logic based on `days`, parameter validation regex, and return format. This compensates for missing annotations and provides essential behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections, bulleted granularity table, and clear parameter explanations. It is slightly verbose with the regex note but remains efficient and front-loads the purpose. Good structure overall.
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?
Without an output schema, the description explains the return structure (object with three arrays of [unix_ms, value] pairs). It covers granularity, parameters, and typical use cases. Minor omissions (e.g., error handling) do not detract from overall completeness for this simple 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?
With 0% schema description coverage, the description fully compensates by explaining each parameter: `coin_id` (with example and regex), `vs_currency` (with examples), `days` (with valid values including 'max'), and `interval` (with enum options). This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get historical price, market cap and total volume time series for a coin,' which is a specific verb+resource combination. It also explicitly distinguishes itself from sibling `get_aggregated_ohlc` by directing users to that tool for candlestick data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool for 'line charts or compute returns/volatility' and provides an alternative for OHLC data. While it lacks explicit 'when not to use' statements beyond the alternative, the context is clear enough for correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nft_collectionA
Get detailed data for a single NFT collection: floor price, market cap, volume, holders, links.
Args:
nft_id: CoinGecko NFT collection ID, e.g. "bored-ape-yacht-club",
"cryptopunks". Use search or list_nfts to find IDs.
Returns:
NFT collection object with floor_price, market_cap, volume_24h,
floor_price_in_usd_24h_percentage_change, number_of_unique_addresses,
total_supply, links, image, etc.
Note: nft_id is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| nft_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral aspects. It details return fields and validation of nft_id, but does not mention error behavior or side effects. Adequate but not thorough.
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-structured with a one-line summary, explicit Args/Returns sections, and a Note. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter and no output schema, the description covers the purpose, parameter details, and return contents completely. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description fully explains the nft_id parameter: what it represents, examples, how to find valid IDs, and regex validation. Adds substantial meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets detailed data for a single NFT collection, listing specific metrics like floor price and market cap. Distinguishes from sibling tools like list_nfts (multiple) and get_coin_details (coins).
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?
Recommends using search or list_nfts to find the nft_id. Does not explicitly state when not to use it, but the guidance for ID discovery is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_interestA
Get the current open interest (OI) for a perpetual contract on one exchange.
Open interest is the total notional/contract count of outstanding positions on a venue. Reading OI alongside price:
OI rising with price rising -> new longs entering, trend has fuel
OI rising with price falling -> new shorts loading up
OI falling with price rising -> short squeeze / covering rally
OI falling with price falling -> longs capitulating This is descriptive, not advice. For funding-rate context use
get_funding_rate(snapshot) orget_funding_rate_history(series).
Falls back to fetch_open_interest_history(timeframe="1h", limit=1) when
the exchange exposes only the historical endpoint.
Args: exchange_id: CCXT exchange ID supporting perps. symbol: Perp symbol with settle suffix, e.g. "BTC/USDT:USDT" or "BTC/USD:BTC" for inverse.
Returns:
Object with symbol, openInterestAmount (in base units / contracts),
openInterestValue (notional in quote), timestamp, datetime, and
exchange-specific info. On unsupported exchanges returns
{"error": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses fallback behavior to fetch_open_interest_history, explains the return object format, and mentions error handling for unsupported exchanges. This adds significant behavioral context beyond just the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: definition, interpretive guideline, fallback note, parameter docs, return description. It is slightly long but each sentence adds value, and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return fields, fallback, and error handling. It is complete enough for an agent to invoke correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains each parameter: exchange_id as 'CCXT exchange ID supporting perps' and symbol with example suffix. It also details the return object structure, compensating for the lack of schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Get the current open interest (OI) for a perpetual contract on one exchange.' It distinguishes itself from sibling tools like get_funding_rate and get_funding_rate_history by explicitly mentioning them as alternatives for funding-rate context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides interpretive guidance on reading OI with price action and explicitly names alternative tools for funding-rate context. It lacks explicit when-not-to-use guidance but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderbookA
Get a Level-2 order-book snapshot (top bids and asks) from a specific exchange.
Use to assess liquidity, spread, and short-term supply/demand on a venue. Note this is a snapshot, not a stream.
Args: exchange_id: CCXT exchange ID. symbol: CCXT unified symbol, e.g. "BTC/USDT". limit: How many price levels per side (default 20). Some exchanges cap this; CCXT will return as many as the venue allows.
Returns:
Object with symbol, timestamp, datetime, bids (array of
[price, amount] pairs sorted high to low), asks (low to high), nonce.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions it's a snapshot (not a stream), but does not explicitly state it's a read-only operation, any authentication requirements, rate limits, or side effects. This is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief summary, usage note, parameter documentation, and return format. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers the return structure, parameter details, and purpose. It lacks error handling or edge-case behavior, but is otherwise comprehensive for a snapshot 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?
With 0% schema description coverage, the description adds essential context for all three parameters: explains exchange_id as CCXT ID, symbol with example, and limit with default and behavior across exchanges. This fully compensates for the schema's lack of 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 clearly states the verb 'Get' and the resource 'Level-2 order-book snapshot', specifies it's from a specific exchange, and lists use cases. It distinguishes from sibling 'get_consolidated_orderbook' by clarifying it's per exchange.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usage context ('assess liquidity, spread, short-term supply/demand') and notes it's a snapshot, not a stream. However, it does not provide explicit when-not-to-use guidance or compare to alternatives like get_consolidated_orderbook.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_priceA
Get the current spot price of one or more cryptocurrencies.
Use this for the cheapest, fastest "what is X worth right now?" lookup.
For historical prices, use get_market_chart or get_aggregated_ohlc.
For real-time prices on a specific venue, use get_exchange_ticker.
Args:
coin_ids: Comma-separated CoinGecko coin IDs, e.g. "bitcoin,ethereum,solana".
IDs are NOT ticker symbols — call search first if unsure.
vs_currencies: Comma-separated target currencies, e.g. "usd,eur,btc".
include_market_cap: Include each coin's market cap in the response.
include_24hr_vol: Include 24h trading volume.
include_24hr_change: Include 24h price change percent.
include_last_updated_at: Include unix timestamp of last update.
Returns: Mapping of {coin_id: {currency: price, ...}}. When the optional flags are enabled, additional fields like "_market_cap", "_24h_vol", "_24h_change", and "last_updated_at" appear alongside the price.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_ids | Yes | ||
| vs_currencies | No | usd | |
| include_market_cap | No | ||
| include_24hr_vol | No | ||
| include_24hr_change | No | ||
| include_last_updated_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes the return structure and notes that coin IDs are not ticker symbols. It does not mention rate limits, pagination, or error behavior, but provides sufficient behavioral clarity for a simple lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear purpose, usage note, parameter list, and return description. Slightly verbose but each sentence adds value; front-loaded with key 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 all parameters and return structure, including optional flags. Lacks mention of response size or rate limits, but is complete enough for typical usage given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It explains each parameter in detail (coin_ids, vs_currencies, optional flags) with examples and a critical note about coin IDs not being ticker symbols.
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?
Clearly states it gets current spot price of one or more cryptocurrencies. Distinguishes from sibling tools by specifying it's for the cheapest, fastest current price lookup, contrasting with historical (get_market_chart) and venue-specific (get_exchange_ticker) tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends use for 'what is X worth right now?' and provides alternatives: for historical prices use get_market_chart or get_aggregated_ohlc, for real-time venue-specific prices use get_exchange_ticker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protocol_tvlA
Get a single protocol's metadata, current TVL, and recent TVL history.
Use after list_protocols to drill into one protocol — e.g. "what is
Aave's TVL on each chain?" or "show me Lido's last 90 days of TVL."
The raw DefiLlama response is enormous (multi-year daily series for the
overall protocol AND every chain it touches), so this tool trims each
history series to the last history_days daily points and drops the
per-token breakdown arrays (tokens, tokensInUsd).
Args:
slug: Protocol slug from list_protocols (e.g. "aave-v3", "lido",
"uniswap-v3"). NOT a CoinGecko coin ID.
history_days: Number of trailing daily points to keep for each TVL
series. Default 90; use a smaller value for compactness or a
larger value (up to ~1500) for long-range analysis.
Returns:
Protocol object with id, name, symbol, category, chains,
chain, description, url, mcap, currentChainTvls (snapshot
per chain), tvl (recent series of {date, totalLiquidityUSD}), and
chainTvls (per-chain trimmed series).
Note: slug is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| history_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses behavioral traits: it trims each history series to history_days, drops per-token breakdown arrays, and validates slug against regex. Also notes the raw DefiLlama response is enormous, adding important context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is fairly long but well-structured with clear sections: purpose, usage, args, returns, note. Every sentence adds value; minimal fluff. Could be slightly more concise but effective.
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, but description covers return object structure in detail. Parameter details are comprehensive, usage context is clear, and validation note included. Fully adequate for a two-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds thorough meaning: explains slug format with examples and validation hint, and history_days includes default, purpose, and typical range. Goes far beyond schema names/types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a single protocol's metadata, current TVL, and recent TVL history, with specific examples (Aave, Lido). It distinguishes from sibling tools like list_protocols by focusing on drilling into one protocol.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use after list_protocols, gives example queries, clarifies slug is not a CoinGecko ID, and warns about raw response size and trimming behavior. Provides clear context for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_tradesA
Get recent public trades (the tape) for a symbol on a specific exchange.
Use to inspect order flow, identify large prints, or compute very short-term trade-driven metrics.
Args: exchange_id: CCXT exchange ID. symbol: Unified symbol, e.g. "BTC/USDT". limit: Number of recent trades to return (max ~1000 depending on venue).
Returns:
Array of trades with id, timestamp, datetime, symbol, side,
price, amount, cost, takerOrMaker.
| Name | Required | Description | Default |
|---|---|---|---|
| exchange_id | Yes | ||
| symbol | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially discloses behavior: it mentions the return format and that limit has a maximum of ~1000 depending on venue. However, it omits other behavioral traits like rate limits, data freshness, authentication requirements, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into a brief intro, usage line, Args section, and Returns. It is concise without being terse, though the structure could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description includes a Returns section detailing the array of trade fields. It also covers all parameters adequately. Missing context like authentication or rate limits, but overall complete for a public data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates well by providing an Args section that explains each parameter (exchange_id, symbol, limit) with examples and constraints (e.g., default 50, max ~1000). Adds meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get recent public trades (the tape) for a symbol on a specific exchange.' It uses a specific verb-resource pair and outlines use cases (inspect order flow, identify large prints, compute metrics), distinguishing it from other get_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly says 'Use to inspect order flow, identify large prints, or compute very short-term trade-driven metrics.' This gives clear guidance on when to use, but lacks explicit when-not-to-use or differentiation from other similar tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_dex_priceA
Get DefiLlama oracle spot prices for tokens identified by chain:address.
Use when you have a token's contract address and want a price without
going through CoinGecko/DexScreener — DefiLlama aggregates DEX prices
across many sources. For human-friendly token discovery (search by
symbol/name), use dex_search (DexScreener) or CoinGecko's search.
Args:
coins: Comma-separated chain:address identifiers, e.g.
"ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,bsc:0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c".
Chain identifiers follow DefiLlama's naming (e.g. "ethereum",
"bsc", "polygon", "arbitrum", "base", "solana"). Solana uses
"solana:".
Returns:
Object with a coins map keyed by chain:address, where each value
has decimals, price, symbol, timestamp, confidence.
Note: Each chain:address segment of coins is validated. Chain matches
^[a-z0-9-]{1,40}$ and address is EVM hex, Solana base58, or DefiLlama
token id.
| Name | Required | Description | Default |
|---|---|---|---|
| coins | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses return format (coins map with decimals, price, symbol, timestamp, confidence) and validation rules. Could mention that it fetches from external API or potential rate limits, but overall good.
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-structured with Args, Returns, and Note sections. Every sentence adds value without redundancy. Front-loaded with clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, no output schema, and no annotations, the description is fully complete. It covers input format, output structure, validation, and context for alternatives.
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 has zero description coverage for the single string parameter. Description fully compensates by explaining the comma-separated chain:address format, providing examples, chain naming conventions, and validation regex.
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?
Description clearly states it gets DefiLlama oracle spot prices for tokens identified by chain:address. It distinguishes from siblings by explicitly mentioning alternatives like dex_search and CoinGecko search for human-friendly discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('when you have a token's contract address and want a price without going through CoinGecko/DexScreener') and provides alternatives. Also gives detailed format for coins parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_gainers_losersA
Get the biggest price movers (gainers and losers) over a time window.
NOTE: This endpoint typically requires a CoinGecko API key (Demo tier is
fine). Without a key it may return an error — fall back to list_top_coins
and sort client-side if so.
Args: vs_currency: Quote currency. duration: Time window for price change. top_coins: Universe to scan — "300", "500", "1000", or "all".
Returns:
Object with top_gainers and top_losers arrays of coin objects
including usd_24h_change (or whichever duration you chose).
| Name | Required | Description | Default |
|---|---|---|---|
| vs_currency | No | usd | |
| duration | No | 24h | |
| top_coins | No | 1000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description discloses the API key dependency, potential error without key, and return structure (object with arrays). It is transparent about behavior but could mention read-only nature explicitly.
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 reasonably concise, with a clear first sentence, separate sections for args and returns. It could be slightly more streamlined but remains efficient.
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?
In the absence of annotations and output schema, the description covers purpose, authentication, fallback, return structure, and parameter semantics. It does not explicitly state default values or optionality, but overall provides adequate context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The 'Args' section explains each parameter's purpose and includes enum values for 'top_coins' but not for 'duration'. Schema coverage is 0%, so description adds meaning, but not all enum options are listed, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the biggest price movers (gainers and losers) over a time window, with a specific verb and resource. It distinguishes itself from sibling tool 'list_top_coins' by mentioning a fallback, showing differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes the API key requirement and fallback to 'list_top_coins' if no key is provided, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trendingA
Get currently trending coins, NFT collections and categories on CoinGecko (last 24h searches).
Use to answer "what is the market paying attention to right now?" or to surface narratives. This is search-driven, not volume-driven, so it captures emergent interest before price moves.
Returns:
Object with arrays coins, nfts, and categories. Each coin item
includes item.id, item.name, item.symbol, item.market_cap_rank,
and item.data with price/24h-change snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that data is search-driven and returns a specific structure with price snapshots. No annotations exist, so description carries full burden. It does not mention potential limits like the number of items returned or any rate-limiting behavior, which would be helpful.
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?
Concise and well-structured: first sentence states purpose, second provides usage context, then a clear 'Returns' section with specific fields. No unnecessary words; every sentence adds 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?
Given no parameters and no output schema, the description fully explains what the tool returns and the context for use. It includes enough detail for an agent to understand the output and decide when to invoke 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 0 parameters, the schema provides no information. The description adds meaning by detailing the return structure (coins, nfts, categories) and fields like item.id, item.name, etc. This exceeds the baseline of 3 for high schema coverage and effectively compensates for the lack of params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets trending coins, NFT collections, and categories based on last 24h searches. It distinguishes itself from siblings like get_top_gainers_losers by emphasizing search-driven vs volume-driven, and specifies the exact data returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives example questions ('what is the market paying attention to right now?') and explains the search-driven nature, helping the agent decide when to use it. However, it does not explicitly mention when not to use it or point to alternative tools for volume-driven queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Parallel-ping every upstream data source and report status + latency.
DEBUGGING tool. Call only when the user reports something is broken ("X is down", "data looks stale") or when you suspect an upstream is degraded. Do NOT call on every request — issues fresh network calls.
Pings in parallel:
CoinGecko: /ping
DefiLlama: /protocols?limit=1
DexScreener: /latest/dex/search?q=BTC
Alternative.me: /fng/?limit=1
CCXT/Binance: fetch_status() (fetch_ticker fallback)
Returns:
Object with checked_at (ISO8601 UTC), all_ok (bool — true iff every
source succeeded), and sources — array sorted by latency asc. Each
entry has source, ok, latency_ms, and detail (short success
identifier or <ExceptionType>: <first 100 chars> on failure).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: makes fresh network calls, pings in parallel, lists each upstream source, and describes the return format including fields and error detail. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: summary line, usage guidelines, list of sources, return format. Every sentence is valuable and earns its place. Concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of output schema, the description covers everything: behavior, sources, and return details. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in the input schema, so the description provides all necessary context about what the tool does. It adds complete meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Parallel-ping every upstream data source and report status + latency.' It uses specific verbs and resources, and among many sibling tools, this is the only health-check tool, so it's well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'DEBUGGING tool. Call only when the user reports something is broken... Do NOT call on every request.' This clearly tells when to use and when not to use, with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesA
List all coin categories with aggregated market data (market cap, 24h volume, 24h change).
Use to discover narratives ("Layer 1", "DeFi", "Meme", "AI", "RWA",
"Liquid Staking", ...) and to find category IDs you can pass to
list_top_coins(category=...).
Args: order: Sort order.
Returns:
Array of categories with id, name, market_cap,
market_cap_change_24h, volume_24h, top_3_coins, updated_at.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | market_cap_desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It discloses that the tool is a read-only list operation and details the return fields (e.g., id, name, market_cap). However, it does not mention any side effects, rate limits, or authentication requirements, which is acceptable for a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for args and returns, and it is front-loaded with the main purpose. It is concise, though the code block for args and returns adds slight verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter and no output schema, the description adequately covers the input, output, and use case. It explicitly lists return fields, which is sufficient for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is 'order' with an enum of sort orders. The description notes 'order: Sort order,' which adds minimal meaning beyond the schema's 'title' and enum values. The schema coverage is 0% for property descriptions, so the description should compensate more here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all coin categories with aggregated market data (market cap, 24h volume, 24h change).' It specifies the verb (list), resource (coin categories), and differentiates from siblings by explicitly mentioning the use case of finding category IDs for list_top_coins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage: 'Use to discover narratives... and to find category IDs you can pass to list_top_coins(category=...).' This gives clear context for when to use the tool, though it does not mention when not to use it or provide direct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chains_tvlA
List blockchain networks ranked by current total DeFi TVL.
Use for "which chains have the most DeFi activity?", "how does Solana's
TVL compare to Ethereum's?", or to discover chain names you can pass to
get_chain_tvl_history or list_protocols(chain=...).
Args: limit: Number of chains to return after sorting by TVL desc (1..200).
Returns:
Array of chain summaries with name, tvl, tokenSymbol, chainId,
gecko_id, cmcId.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description implies a read-only operation by stating it lists current TVL. It doesn't explicitly state non-destructiveness, but the context is clear. Returns a sorted array, and mentions parameters and return fields, which adds transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured with two paragraphs plus Args/Returns. Every sentence contributes meaning, and the most important info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, no output schema, no annotations), the description is complete: covers purpose, usage, parameter, and return structure. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (limit) with schema coverage 0%. Description adds value by explaining 'Number of chains to return after sorting by TVL desc (1..200)', providing range and default behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List blockchain networks ranked by current total DeFi TVL.' It uses a specific verb and resource, and distinguishes from sibling tools like get_chain_tvl_history and list_protocols by mentioning them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage examples and when to use alternatives: 'Use for 'which chains have the most DeFi activity?', 'how does Solana's TVL compare to Ethereum's?', or to discover chain names you can pass to get_chain_tvl_history or list_protocols(chain=...).'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_derivatives_exchangesA
List derivatives (futures/perp/options) exchanges ranked by open interest or volume.
Use to compare derivatives venues (Binance Futures, Bybit, OKX, dYdX, etc.) by size.
Args: order: Sort order. per_page: 1..250 per page. page: Page number.
Returns:
Array of derivatives exchanges with id, name, open_interest_btc,
trade_volume_24h_btc, number_of_perpetual_pairs,
number_of_futures_pairs, year_established, country, url.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | open_interest_btc_desc | |
| per_page | No | ||
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It only states 'List' (implying read-only) but omits details on caching, rate limits, data freshness, or any side effects, leaving gaps for an AI agent.
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 concise with a short introductory sentence and clear bullet-like parameter and return listings. No extraneous information, though structure could be slightly improved with formatting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with pagination, the description covers parameters and explicitly lists return fields (compensating for lack of output schema). It lacks error handling details but is complete enough for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It provides brief explanations for each parameter (e.g., 'Sort order' for order, '1..250 per page' for per_page), adding some value beyond the schema defaults and enums, but not deeply elaborating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists derivatives exchanges (futures/perp/options) ranked by open interest or volume, using a specific verb and resource. It distinguishes itself from sibling tools like list_exchanges_directory by focusing on derivatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to compare derivatives venues... by size,' providing a clear use case. However, it does not mention when not to use it or alternative tools, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dex_volumesA
List DEXes ranked by 24-hour trading volume.
Use for "biggest DEXes by volume", "Uniswap vs PancakeSwap volume", or to
see momentum (each entry includes 1d/7d/30d change percentages). Pair with
CCXT's get_exchange_ticker for centralized-exchange volumes.
Args: limit: Number of DEXes to return (1..200).
Returns:
Object with a summary (totals across all DEXes: total24h,
total7d, total30d, change_1d, change_7d, change_1m) and
protocols — an array of name, displayName, slug, category,
chains, total24h, total7d, total30d, total1y, totalAllTime,
change_1d, change_7d, change_1m.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description details return structure and change percentages, but could mention rate limits or update frequency.
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-structured with usage, args, returns; slightly verbose in returns but overall efficient.
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?
Comprehensive for a simple list tool: purpose, usage, param, and detailed output; no missing essential info.
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?
Adds range and clarification beyond schema (1..200, number of DEXes), compensating for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List DEXes ranked by 24-hour trading volume' with example queries, distinguishing from sibling 'dex_search'.
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 cases and suggests pairing with 'get_exchange_ticker' for centralized exchanges, but lacks explicit when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_exchanges_directoryA
List centralized exchanges from CoinGecko's directory, ranked by trust score / volume.
This is CoinGecko's curated directory with metadata (year established,
country, trust scores, 24h BTC-equivalent volume). For exchanges you can
actually query in real time via this MCP, see list_supported_exchanges.
Args: per_page: 1..250 exchanges per page. page: Page number.
Returns:
Array of exchanges with id, name, year_established, country,
url, image, trust_score, trust_score_rank, trade_volume_24h_btc,
trade_volume_24h_btc_normalized.
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | ||
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Clearly describes it as a read-only listing with specified return fields and sorting. Lacks explicit idempotency or safety statement, but the nature is obvious.
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-structured with purpose sentence, clarification, and Args/Returns sections. Each sentence adds value, though slightly longer than minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description lists all return fields. Specifies sorting, distinguishes from sibling, and covers parameters. Complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0% but description adds range for per_page (1..250) and clarifies page is a page number. Adds meaning beyond schema defaults and types.
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?
Explicitly states it lists centralized exchanges from CoinGecko's directory ranked by trust score/volume. Clearly distinguishes from sibling list_supported_exchanges, which is for live queryable exchanges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when not to use (for live queryable exchanges) and provides alternative list_supported_exchanges. Also describes that it returns metadata for curated directory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fees_revenueA
List protocols ranked by fees or revenue (daily or all-time).
Useful for "which protocols make the most money?", "Tron vs Ethereum
fees", or "Aave's revenue this month". DefiLlama distinguishes fees
(gross paid by users) from revenue (kept by the protocol/token holders),
and offers daily and all-time aggregations — pick via data_type.
Args:
limit: Number of protocols to return (1..200).
data_type: Which metric series to pull. "dailyFees" = fees on a daily
basis (typical for "what's hot today?"), "dailyRevenue" = revenue
on a daily basis, "totalFees"/"totalRevenue" = cumulative all-time.
Note: regardless of data_type, each protocol's per-window fields
are still named total24h, total7d, total30d, etc., but they
now refer to the chosen metric.
Returns:
Object with a summary (totals across all protocols: total24h,
total7d, total30d, change_1d, change_7d, change_1m) and
protocols — an array of name, displayName, slug, category,
chains, total24h, total7d, total30d, total1y, totalAllTime,
change_7dover7d, change_30dover30d.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| data_type | No | dailyFees |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses the return format, the subtle field naming behavior when data_type changes, and the distinction between fees and revenue. Does not address destructive actions or auth needs, largely unnecessary for a read-like operation.
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 verbose and includes extensive return field details. While well-structured with Args/Returns sections, it could be more concise without losing clarity.
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, but the description provides complete return format details (summary and protocols fields). Covers parameter semantics and behavioral nuances thoroughly, making the tool fully understandable for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the description compensates fully: explains each parameter's role, enum values meaning, and the note about per-window field names referring to the chosen metric. Adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists protocols ranked by fees or revenue, with specific use cases and differentiation between fees and revenue. It distinguishes from sibling tools like list_protocols and list_dex_volumes by focusing on fee/revenue metrics.
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 examples of when to use (e.g., 'which protocols make the most money?') and explains the data_type parameter with practical guidance. Does not explicitly mention when not to use or alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_latest_dex_tokensA
List the latest tokens that have set up a profile on DexScreener.
A profile means the project has filled in description / website / socials on DexScreener — typically a sign of a newly-launched but at least somewhat promoted token. Useful as an early-signal feed for "what's new today?"
NOTE: a profile does not imply legitimacy or liquidity. Cross-check with
get_dex_token_pairs(token_address, ...) before quoting prices.
Args: limit: Max tokens to return (the API itself returns up to ~30).
Returns:
Array of token-profile objects with chainId, tokenAddress, url,
description, icon, and a links array of websites/socials.
On API failure returns {"error": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return type, error handling, and API cap. No destructive behavior implied, though annotations absent.
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-organized with purpose, caveats, and structured Args/Returns sections. Efficient and informative.
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 all necessary context: purpose, usage, limitations, parameter, and return format. Adequate for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter 'limit' gets clear explanation of meaning and API cap, compensating for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'list' and specific resource 'latest tokens with profile on DexScreener'. Differentiates from sibling tools like 'dex_search' by focusing on token profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use case as early-signal feed and warns about legitimacy, suggesting cross-check with 'get_dex_token_pairs'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_nftsA
List NFT collections sortable by floor price, market cap, or 24h volume.
Args: order: Sort order. per_page: 1..250. page: Page number.
Returns:
Array of NFT collections with id, name, symbol, asset_platform_id,
contract_address. Use get_nft_collection for details on one.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | market_cap_usd_desc | |
| per_page | No | ||
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It states that it is a listing operation returning an array of NFT collections with specific fields. However, it does not disclose rate limits, authentication needs, or error handling, which would be helpful.
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 very concise with a clear purpose sentence, followed by structured Args and Returns sections. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with 3 parameters and no output schema, the description provides acceptable information: sort options, pagination, and return fields. It directs to 'get_nft_collection' for details. Could be improved by noting default sort direction.
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 descriptions of parameters are minimal ('Sort order', '1..250', 'Page number'), but the purpose text adds meaning by listing sortable metrics. Schema coverage is 0%, so the description partially compensates but does not explain all enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists NFT collections with sort options (floor price, market cap, 24h volume). It distinguishes from sibling 'get_nft_collection' which is for a single collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the sort, pagination, and return fields. It directs to 'get_nft_collection' for details, providing an alternative. However, it does not explicitly state when not to use this tool or compare to other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_protocolsA
List DeFi protocols ranked by TVL (or 1d/7d change, or market cap).
Use this for "what are the biggest DeFi protocols?", "which protocols had
the largest TVL inflows/outflows today?", or to find a protocol's slug
before calling get_protocol_tvl. Far more granular than CoinGecko's
get_global_defi, which only returns aggregate DeFi market cap.
Args:
limit: Number of protocols to return after sorting (1..500).
sort_by: Metric to rank by, descending. "tvl" = current TVL,
"change_1d"/"change_7d" = TVL change %, "mcap" = token market cap.
chain: Optional chain name filter (e.g. "Ethereum", "Solana", "Base",
"Arbitrum"). Matches against each protocol's chains array,
case-insensitive. Empty string disables the filter.
Returns:
Array of protocol summaries with name, slug, symbol, category,
chain, chains, tvl, change_1h, change_1d, change_7d,
mcap, url.
Note: chain (when non-empty) is validated against ^[a-z0-9][a-z0-9._-]{0,127}$.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sort_by | No | tvl | |
| chain | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains sorting behavior, filtering by chain, and specifies return fields. While it doesn't explicitly state side effects (e.g., mutability), the action is inherently read-only and the description is thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections and is front-loaded. However, it includes some redundancy (e.g., repeated field list) and could be slightly more concise while remaining clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description is comprehensive. It covers full parameter behavior, return fields, and includes a validation note. The agent has all necessary information 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 0%, but the description fully compensates by explaining each parameter: limit range (1..500), sort_by options (tvl, change_1d, etc.), and chain filter with validation regex. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List DeFi protocols ranked by TVL (or 1d/7d change, or market cap).' It specifies the verb 'list' and the resource 'DeFi protocols', and distinguishes itself from sibling tools like get_global_defi and get_protocol_tvl, which is explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use examples: 'Use this for "what are the biggest DeFi protocols?"...' and contrasts with get_global_defi, stating 'Far more granular than CoinGecko's get_global_defi, which only returns aggregate DeFi market cap.' This gives clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stablecoinsA
List stablecoins ranked by current circulating market cap.
Use for "what are the biggest stablecoins?", "is USDT or USDC bigger?",
"where is USDC issued (which chains)?", or to track peg health
(price field shows the current oracle price).
Args:
limit: Number of stablecoins to return (1..200).
include_chain_breakdown: If true, includes a chainCirculating map
of supply per chain. If false, drops it to keep the response
small (the breakdown for the top stablecoins is verbose).
Returns:
Array of stablecoin summaries with id, name, symbol, pegType,
pegMechanism, price, circulating, circulatingPrevDay,
circulatingPrevWeek, circulatingPrevMonth, chains, and
(optionally) chainCirculating. The id field is what
get_stablecoin_detail would accept (DefiLlama internal id).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| include_chain_breakdown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description details return fields, conditional behavior (include_chain_breakdown), and links the id field to get_stablecoin_detail. Discloses essential behavioral traits.
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-structured with summary, examples, Args, and Returns. Front-loaded with purpose. Every sentence adds value, though could be slightly more concise.
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, but description thoroughly covers return fields, optional chainCirculating, and explains the id field usage. Complete for a stablecoin listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains both parameters: limit (range 1-200) and include_chain_breakdown (boolean affecting response size). Adds meaning beyond schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists stablecoins ranked by market cap, with examples like 'what are the biggest stablecoins?' Distinguishes from siblings like list_top_coins by focusing on stablecoins.
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 cases (e.g., comparing stablecoins, tracking peg health). Lacks explicit when not to use or alternatives, but the examples make the intent clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_exchangesA
List all exchange IDs that this server can query in real time via CCXT.
Use this when you need to know which exchange_id values are valid for the
other CCXT-backed tools (get_exchange_markets, get_exchange_ticker,
get_orderbook, get_recent_trades, get_exchange_ohlcv, get_funding_rate).
Returns:
Object with count and exchanges (array of lowercase exchange IDs
such as "binance", "okx", "coinbase", "kraken", "bybit", "kucoin",
"huobi", "bitfinex", "gateio", "mexc").
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description transparently explains the tool returns an object with `count` and `exchanges` array, with example values. No side effects are expected, and the return structure is fully disclosed. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, with two clear paragraphs: purpose and return format. No unnecessary words. Front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fully covers the tool's behavior: what it does, why use it, and what it returns. Complete for its simplicity.
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?
No parameters are defined in the input schema. The description adds no parameter info beyond schema (which is empty). Baseline for 0-param tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists supported exchange IDs via CCXT, with a specific verb ('List') and resource ('exchange IDs'). It explicitly differentiates from siblings by noting it provides valid IDs for other CCXT-backed tools like `get_exchange_markets`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly states when to use: 'Use this when you need to know which exchange_id values are valid for the other CCXT-backed tools.' It lists those tools, providing clear context. No explicit when-not, but the purpose is narrow enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_top_boosted_tokensA
List currently top-boosted tokens on DexScreener (paid promotion).
"Boosts" are paid promotion slots — projects pay to surface their token. Read these results with skepticism: high boost spend does NOT imply quality, traction or safety. This list is mostly useful as a signal of "what is being actively pushed right now" rather than "what is good".
For an unbiased early-tokens view prefer list_latest_dex_tokens; for
actual price/liquidity always confirm via get_dex_token_pairs.
Args: limit: Max tokens to return.
Returns:
Array of boosted-token objects with chainId, tokenAddress, url,
description, icon, links, and totalAmount (boost spend).
On API failure returns {"error": "..."}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral aspects: it explains that boosts are paid promotions, that high spend does not imply quality/traction/safety, and that it signals active pushing. It also documents return structure including error responses. A slight deduction for not mentioning rate limits or other potential constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief statement, a caution section, usage alternatives, and parameter/return doc. It is front-loaded with the core purpose. Some redundancy in the caution section could be trimmed, but overall efficient for the content delivered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description compensates by listing return fields (chainId, tokenAddress, etc.) and error handling. It also provides contextual advice about using complementary tools for deeper analysis. However, it could mention the ranking criterion or refresh frequency, leaving some minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate for the single parameter 'limit'. It states 'Max tokens to return', which is functional but minimal. No range, default behavior beyond schema, or caveats are provided, giving only basic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists currently top-boosted tokens on DexScreener, a paid promotion. It explicitly distinguishes itself from siblings like list_latest_dex_tokens and get_dex_token_pairs, providing a specific verb and resource with context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it is useful as a signal of what is being actively pushed. It also gives clear when-not-to-use alternatives: prefer list_latest_dex_tokens for unbiased early tokens and get_dex_token_pairs for price/liquidity confirmation. The caveat to read results with skepticism adds further guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_top_coinsA
List top coins with market data (price, market cap, volume, change %) — sortable and paginated.
The workhorse for "show me the top N coins" / "top by volume" / "top in DeFi" style questions. Each call returns up to 250 coins; paginate for more.
Args:
vs_currency: Quote currency (e.g. "usd").
order: Sort order. Default is descending market cap.
per_page: 1..250 coins per page.
page: Page number, 1-indexed.
category: Optional category ID to filter by (see list_categories),
e.g. "decentralized-finance-defi", "layer-1", "meme-token".
price_change_percentages: Comma list of windows to include —
any of "1h,24h,7d,14d,30d,200d,1y".
Returns: Array of coin objects with id, symbol, name, image, current_price, market_cap, market_cap_rank, total_volume, high_24h, low_24h, price_change_*_in_currency, ath, atl, circulating_supply, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| vs_currency | No | usd | |
| order | No | market_cap_desc | |
| per_page | No | ||
| page | No | ||
| category | No | ||
| price_change_percentages | No | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It explains the tool's behavior (list, sort, paginate) but omits details like rate limits, authentication needs, data freshness, or any side effects, which is a moderate gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise summary, a helpful one-sentence context, a bulleted Args list, and a Returns list. Every sentence adds value without redundancy, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, all optional, no output schema, and many sibling tools, the description provides sufficient context: usage patterns, parameter details, and return fields. Minor omissions like error handling or limits beyond pagination prevent a perfect score.
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 0% schema description coverage, the description thoroughly explains all 6 parameters in the Args block, including defaults, possible values for order, category reference to list_categories, and format for price_change_percentages, adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List top coins with market data (price, market cap, volume, change %)' and identifies specific use cases like 'show me the top N coins' and 'top by volume', distinguishing it from sibling tools such as get_price or get_top_gainers_losers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use the tool ('workhorse for show me the top N coins style questions') and mentions pagination for more results, but does not explicitly state when not to use it or provide alternatives beyond the implicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_yield_poolsA
List DeFi yield-bearing pools (lending, staking, LPs) filtered & ranked by APY or TVL.
The DefiLlama yields endpoint returns ~20k pools, so this tool aggressively
filters and slices client-side. Use for "best stablecoin yields right now",
"highest APY on Aave", "Lido vs Rocket Pool TVL", etc. Pair with
list_protocols if you want protocol-level TVL rather than per-pool APY.
Args:
min_tvl_usd: Minimum pool TVL in USD. Default 1M filters out tiny
pools. Set to 0 to disable.
project: Optional project filter, e.g. "aave-v3", "lido", "compound-v3".
Matches the project field, case-insensitive.
chain: Optional chain filter, e.g. "Ethereum", "Solana", "Arbitrum".
Case-insensitive exact match against chain.
symbol: Optional symbol/token substring filter, e.g. "USDC", "ETH",
"STETH". Case-insensitive substring match against symbol.
limit: Number of pools to return after filtering & sorting (1..500).
sort_by: Metric to rank by, descending. "apy" = current APY,
"tvlUsd" = pool size, "apyMean30d" = 30-day mean APY.
Returns:
Array of pool summaries with pool (DefiLlama pool id), chain,
project, symbol, tvlUsd, apy, apyBase, apyReward,
apyMean30d, apyPct1D, apyPct7D, apyPct30D, stablecoin,
ilRisk, exposure, predictions, rewardTokens, underlyingTokens.
Note: project/chain/symbol (when non-empty) are validated. project
and chain use ^[a-z0-9][a-z0-9._-]{0,127}$; symbol allows mixed case
via ^[A-Za-z0-9._-]{0,63}$.
| Name | Required | Description | Default |
|---|---|---|---|
| min_tvl_usd | No | ||
| project | No | ||
| chain | No | ||
| symbol | No | ||
| limit | No | ||
| sort_by | No | apy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains client-side aggressive filtering, pool count (~20k), validation of parameters, and default behaviors. It does not explicitly state read-only nature but implies it. Without annotations, this provides substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose, usage, args, returns, note. Every sentence adds value, and core purpose is front-loaded. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, it lists all return fields comprehensively. All 6 parameters are explained, validation details provided, and edge cases addressed (default 1M, disable by 0). The tool's behavior is fully specified.
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?
Despite 0% schema coverage, the description explains every parameter in detail: defaults, filtering behavior, case-insensitivity, value ranges (limit 1-500), and enum meanings. Regex patterns add extra clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as listing DeFi yield-bearing pools with filtering and ranking by APY/TVL. It uses specific verbs and resource, and distinguishes from sibling 'list_protocols' by noting different use cases.
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 usage scenarios are given (e.g., 'best stablecoin yields', 'highest APY on Aave'), and an alternative tool is mentioned for protocol-level TVL, guiding when to use this vs. siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Universal CoinGecko search — resolves names/symbols to IDs across coins, exchanges, categories and NFTs.
ALWAYS use this first when the user mentions a coin/exchange/NFT by name or ticker symbol and you don't already know the canonical CoinGecko ID. Most other tools require IDs.
Args: query: Free-text query, e.g. "btc", "uniswap", "bored ape".
Returns: Object with arrays: - coins: [{ id, name, symbol, market_cap_rank, ... }] - exchanges: [{ id, name, market_type }] - categories: [{ id, name }] - nfts: [{ id, name, symbol }]
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details return structure (arrays for coins, exchanges, categories, nfts) and purpose. However, it omits information about rate limits, authentication, or any side effects. Since it's a search tool, likely read-only, but additional behavioral notes would be beneficial.
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?
Description is concise and well-structured: a brief purpose statement, explicit usage guidance, then structured Args and Returns sections. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description fully explains return structure with example fields. Covers all necessary aspects for a search tool: what it searches, how to use, and expected output, making it complete for its complexity.
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?
Single parameter 'query' has no description in input schema. Description adds examples ('btc', 'uniswap', 'bored ape') and clarifies it's a free-text query, greatly enhancing schema's minimal info.
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?
Description clearly states verb (search/resolve) and resource (names/symbols to IDs across coins, exchanges, categories, NFTs). Distinguishes from sibling tools by emphasizing it's the first step when ID is unknown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'ALWAYS use this first when the user mentions a coin/exchange/NFT by name or ticker symbol and you don't already know the canonical CoinGecko ID.' Also notes that most other tools require IDs, providing clear context for alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
49 tool updates
v0.1.0- First observed
cache_stats - First observed
clear_cache - First observed
compare_funding_rates - First observed
compare_prices - First observed
compute_indicators - First observed
dex_search - First observed
get_aggregated_ohlc - First observed
get_chain_tvl_history - First observed
get_coin_details - First observed
get_coin_tickers - First observed
get_companies_holdings - First observed
get_consolidated_orderbook - First observed
get_dex_pair - First observed
get_dex_token_pairs - First observed
get_exchange_info - First observed
get_exchange_markets - First observed
get_exchange_ohlcv - First observed
get_exchange_ticker - First observed
get_fear_greed_index - First observed
get_funding_rate - First observed
get_funding_rate_history - First observed
get_global_defi - First observed
get_global_market - First observed
get_market_chart - First observed
get_nft_collection - First observed
get_open_interest - First observed
get_orderbook - First observed
get_price - First observed
get_protocol_tvl - First observed
get_recent_trades - First observed
get_token_dex_price - First observed
get_top_gainers_losers - First observed
get_trending - First observed
health_check - First observed
list_categories - First observed
list_chains_tvl - First observed
list_derivatives_exchanges - First observed
list_dex_volumes - First observed
list_exchanges_directory - First observed
list_fees_revenue - First observed
list_latest_dex_tokens - First observed
list_nfts - First observed
list_protocols - First observed
list_stablecoins - First observed
list_supported_exchanges - First observed
list_top_boosted_tokens - First observed
list_top_coins - First observed
list_yield_pools - First observed
search
TDQS
Every tool has a clearly distinct purpose, with no overlapping functionality. Tools like get_price, get_exchange_ticker, compare_prices, and get_consolidated_orderbook are all price-related but target different sources and granularities, clearly differentiated by descriptions.
All tools follow a consistent verb_noun snake_case pattern (e.g., get_price, list_top_coins, compare_funding_rates). The naming is predictable and makes it easy to infer tool purpose from the name alone.
With 49 tools, the server is significantly over the typical well-scoped range of 3-15. While each tool appears justified, the sheer number makes it overwhelming for an agent to efficiently select the right tool, increasing cognitive load.
The tool set covers an extensive range of crypto data: prices, market data, exchanges, DEX, DeFi, NFTs, stablecoins, funding rates, and more. Minor gaps exist (e.g., no direct historical price series for multiple coins simultaneously), but overall the surface is comprehensive for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server giving AI agents one-connection access to crypto & DeFi data: DeFi protocol TVL, stableco
Crypto trading intelligence MCP — 34+ endpoints, x402 pay-per-use, AI agent strategy & execution
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
21Unlock the power of real-time cryptocurrency data with our Crypto Price Insights MCP server.
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides real-time and historical cryptocurrency market data through integration with major exchanges. This server enables LLMs like Claude to fetch current prices, analyze market trends, and access detailed trading information.762MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP-compatible AI clients to access live crypto market data and AI-driven quantitative analysis, with structured outputs and full observability.-
- AlicenseBqualityDmaintenanceMCP server that exposes QuantXData's institutional crypto market data APIs to AI assistants, enabling natural language queries for trades, order books, OHLCV, options, and more across 120+ exchanges.12MIT
- AlicenseCqualityCmaintenanceA Model Context Protocol server exposing 58 online tools (crypto, data, image, text, etc.) and workflow execution, enabling MCP clients like Claude Desktop to invoke them via natural language.5816MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sweetcornna/coin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server