DexPaprika (CoinPaprika)
OfficialThe DexPaprika MCP server provides real-time access to cryptocurrency DEX data across multiple blockchains, enabling comprehensive token analysis, pool analytics, and market research.
Core Capabilities:
Network & DEX Discovery: Retrieve all supported blockchain networks (Ethereum, Solana, etc.) and list available DEXes on specific networks with pagination support
Liquidity Pool Analytics: Access top pools by network, filter pools by specific DEX (e.g., Uniswap V3, Raydium), and retrieve detailed metrics including liquidity, volume, fees, and token pair information
Historical Data: Fetch time-series OHLCV data for pools with multiple timeframes (1m to 24h intervals) for technical analysis, backtesting, and price modeling
Transaction Monitoring: View recent pool transactions (swaps, adds, removes) with pagination
Token Intelligence: Get comprehensive token details (USD price, 24h volume, liquidity, market metrics), find all pools containing specific tokens, and batch query USD prices for multiple tokens simultaneously (v1.2.0+)
Cross-Network Search: Search across all networks for tokens, pools, and DEXes by name, symbol, or address
Ecosystem Statistics: Get high-level overview of total networks, DEXes, pools, and tokens available
Use Cases: Token price tracking, DEX comparison, liquidity monitoring, portfolio tracking, yield opportunity identification, market research, cross-chain comparisons, and trading activity analysis.
Key Features: No API keys required, real-time data (updated every 15-30 seconds), 60 requests/minute on free tier, multi-chain support, and historical data available from token/pool creation date.
Provides access to token information, liquidity pools, and DEX data on the Ethereum blockchain
Offers DEX listings and analytics for tokens and liquidity pools on the Fantom network
Supports configuration on macOS through specific file paths for Claude Desktop integration
Distributes the MCP server through npm packages for easy installation and updates
Provides tools to access token prices, pool details, and DEX information on the Solana blockchain
Features a video tutorial hosted on YouTube for setting up and using the DexPaprika MCP server
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., "@DexPaprika (CoinPaprika)show me the top 10 pools on Ethereum by volume"
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.
DexPaprika MCP Server
A Model Context Protocol (MCP) server that provides on-demand access to DexPaprika's cryptocurrency and DEX data API. Built specifically for AI assistants like Claude to programmatically fetch current token, pool and DEX data with zero configuration.
TL;DR
# Install globally
npm install -g dexpaprika-mcp
# Start the server
dexpaprika-mcp
# Or run directly without installation
npx dexpaprika-mcp@latestDexPaprika MCP connects Claude to live DEX data across multiple blockchains. The free tier needs no API key to start. Installation | Configuration | API Reference
Prefer zero setup? Use the hosted MCP server at mcp.dexpaprika.com: no installation, no key to start, the same data tools plus
submitFeedback. See Hosted server for transport endpoints.
Related MCP server: The Graph Token API MCP
Latest release
See CHANGELOG.md for release notes and migration guides.
What Can You Build?
Token Analysis Tools: Track price movements, liquidity depth changes, and volume patterns
DEX Comparisons: Analyze fee structures, volume, and available pools across different DEXes
Liquidity Pool Analytics: Monitor TVL changes, impermanent loss calculations, and price impact assessments
Market Analysis: Cross-chain token comparisons, volume trends, and trading activity metrics
Portfolio Trackers: Current value tracking, historical performance analysis, yield opportunities
Technical Analysis: Perform advanced technical analysis using historical OHLCV data, including trend identification, pattern recognition, and indicator calculations
Installation
Installing via Smithery
To install DexPaprika for Claude Desktop automatically via Smithery:
npx -y smithery mcp add coinpaprika/dexpaprikaManual Installation
# Install globally (recommended for regular use)
npm install -g dexpaprika-mcp
# Start the server
dexpaprika-mcpThis is a stdio server: it speaks MCP over stdin and stdout and binds no port. On start it writes DexPaprika MCP server v<version> (tool contract v<contract>) is running... to stderr and then waits for a client. Run it from an MCP client (Claude Desktop, Cursor, Claude Code) rather than expecting a URL in a browser.
Video Tutorial
Watch our step-by-step tutorial on setting up and using the DexPaprika MCP server:

Claude Desktop Integration
Add the following to your Claude Desktop configuration file:
macOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"dexpaprika": {
"command": "npx",
"args": ["dexpaprika-mcp@latest"]
}
}
}After restarting Claude Desktop, the DexPaprika tools will be available to Claude automatically.
Optional: using an API key
This works without a key and always will. No signup, no card, nothing to configure. Everything above is the supported way to run it.
A free key raises the monthly allowance and opens streaming on any token rather than the public showcase set. It does not raise the per-minute request limit, which is the same on both tiers. Get one at console.dexpaprika.com; current limits are on the rate limits page.
{
"mcpServers": {
"dexpaprika": {
"command": "npx",
"args": ["dexpaprika-mcp@latest"],
"env": {
"DEXPAPRIKA_API_KEY": "your_key_here"
}
}
}
}The key goes in on its own. There is no Bearer prefix, and no other scheme
word either. Paste the key exactly as issued. Almost every other API wants the
opposite, so this is the single most common reason a working key looks broken.
Two things worth knowing:
A key we cannot read does not produce an error. The data endpoints ignore an unreadable key and serve you as an anonymous caller, with a normal
200and real data, so a typo looks exactly like success. Ask the assistant to rungetKeyStatusafter setting one: it reports which plan the API actually sees and names the likely cause when the key is not landing.Pro customers additionally set
DEXPAPRIKA_API_BASE_URLtohttps://api-pro.dexpaprika.com. The host does not change automatically, because sending a free key to that host returns 403.
Hosted server (no installation)
If you prefer zero setup, point any MCP-compatible client directly at the hosted server at mcp.dexpaprika.com. The landing page provides setup instructions and documentation. The following transport endpoints are available:
Transport | Endpoint | Use Case |
Streamable HTTP |
| Recommended for most clients |
SSE |
| Legacy SSE transport |
JSON-RPC |
| Direct JSON-RPC |
Note: These are MCP protocol endpoints. They won't display anything in a browser. Visit mcp.dexpaprika.com for the landing page.
{
"mcpServers": {
"dexpaprika": {
"type": "streamable-http",
"url": "https://mcp.dexpaprika.com/streamable-http"
}
}
}Available Tools (17)
This self-host build registers 17 read tools: 16 market-data tools plus getKeyStatus. The hosted server at mcp.dexpaprika.com registers its own set including submitFeedback. Verify either with a live tools/list.
Discovery
Tool | Description |
| Server capabilities, workflow patterns, network synonyms, and best practices. Start here. |
| List every supported blockchain network (36) |
| High-level ecosystem stats (total networks, DEXes, pools, tokens) |
| Search tokens, pools, and DEXes across ALL networks by name, symbol, or address |
| Whether a key is being sent and which plan the API sees. Reads no market data. |
DEX Operations
Tool | Description | Required Parameters |
| List DEXes on a specific network |
|
Pool Operations
Tool | Description | Required Parameters |
| PRIMARY. Get top liquidity pools on a network |
|
| Get pools from a specific DEX (rows under |
|
| Filter pools by volume, transactions, creation time |
|
| Detailed pool info (price, volume, TVL, tokens) |
|
| Historical OHLCV candle data |
|
| Recent transactions/trades for a pool |
|
Token Operations
Tool | Description | Required Parameters |
| Detailed token information |
|
| Liquidity pools containing a token (network-scoped filter, |
|
| Batched prices for up to 10 tokens |
|
| Top tokens on a network ranked by volume, liquidity, FDV, or 24h price change |
|
| Filter tokens by volume, liquidity, FDV, transactions, and creation time |
|
Example Usage
// Start by getting capabilities for workflow guidance:
const caps = await getCapabilities();
// Get details about a specific token:
const solanaJupToken = await getTokenDetails({
network: "solana",
token_address: "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"
});
// Find pools containing a token (returns `results` with cursor pagination;
// the token filter only works network-scoped):
const jupiterPools = await getTokenPools({
network: "solana",
token_address: "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
order_by: "volume_usd_24h",
limit: 5
});
// Get top pools on Ethereum (returns `results` with cursor pagination):
const ethereumPools = await getNetworkPools({
network: "ethereum",
order_by: "volume_usd_24h",
limit: 10
});
// Filter pools by volume and creation time:
const filteredPools = await getNetworkPoolsFilter({
network: "ethereum",
volume_24h_min: 100000,
created_after: 1710806400,
sort_by: "volume_usd_24h",
limit: 20
});
// Get historical price data:
const ohlcvData = await getPoolOHLCV({
network: "ethereum",
pool_address: "0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
start: "2023-01-01",
interval: "24h",
limit: 30
});
// Batch prices for multiple tokens (max 10):
const prices = await getTokenMultiPrices({
network: "ethereum",
tokens: [
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"0xdac17f958d2ee523a2206206994597c13d831ec7"
]
});Sample Prompts for Claude
"Analyze the JUP token on Solana. Fetch price, volume, and top liquidity pools."
"Compare trading volume between Uniswap V3 and SushiSwap on Ethereum."
"Get the 7-day OHLCV data for SOL/USDC on Raydium and plot a price chart."
"Find the top 5 pools by liquidity on Fantom network and analyze their fee structures."
"Get recent transactions for the ETH/USDT pool on Uniswap and analyze buy vs sell pressure."
"Show me the top 10 pools on Ethereum by 24h volume."
"Search for all pools containing the ARB token and rank them by volume."
"Filter Ethereum pools with >$100K 24h volume created in the last week."
"First get all available networks, then show me the top pools on each major network."
Rate Limits & Performance
Free tier: keyless, no signup, at 15 requests per minute. A free API key raises that to 30 requests per minute, raises the monthly quota, and unlocks streaming: register at https://console.dexpaprika.com. Pro is $99/month at 300 requests per minute. One request costs one credit; batch endpoints cost one credit per item. Full docs at https://docs.dexpaprika.com. Monthly quotas change, so read them here rather than from this page: https://dexpaprika.com/api/pricing
Data delay: up to 15 seconds on the free tier, real-time on Pro
Response Time: 100-500ms for most endpoints (network dependent)
Error Handling: Structured errors with codes, suggestions, and retry guidance
OHLCV Data Availability: Historical data typically available from token/pool creation date
Troubleshooting
Common Issues:
Rate limiting: If receiving
DP429_RATE_LIMITerrors, implement exponential backoffMissing data: Some newer tokens/pools may have incomplete historical data
Timeout errors: Large data requests may take longer, consider pagination
Network errors: Check network connectivity, the service requires internet access
OHLCV limitations: Maximum range between start and end dates is 1 year; use pagination for longer timeframes
Empty OHLCV: Pool may be too new. Use
getPoolTransactionsinstead
Development
# Clone the repository
git clone https://github.com/coinpaprika/dexpaprika-mcp.git
cd dexpaprika-mcp
# Install dependencies
npm install
# Run with auto-restart on code changes
npm run watch
# Build for production
npm run build
# Run tests
npm testChangelog
See CHANGELOG.md for detailed release notes and migration guides.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Additional Resources
Hosted MCP Server, zero-setup option
DexPaprika - Comprehensive onchain analytics market data
CoinPaprika - Comprehensive cryptocurrency market data
Available Tools
17 toolsfilterNetworkTokensARead-onlyIdempotent
Get tokens on one network matching numeric thresholds, returned under 'results' with has_next_page and next_cursor. Read-only and keyless. Choose this over getTopTokens when the user gives numeric constraints or a time window. Use for 'tokens with FDV over $10M on Base', 'newly created tokens today', or 'low-liquidity high-volume tokens'. Optional filters (AND-combined): volume_24h_min/max, liquidity_usd_min/max, fdv_min/max, txns_24h_min, price_change_percentage_24h_min/max, created_after/created_before (Unix timestamps). Also network (required); limit (default 50, max 100); cursor to page; sort_by (default 'volume_usd_24h', alias order_by); sort_dir asc/desc (default 'desc', alias sort).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 50, max: 100) | |
| cursor | No | OPTIONAL: Pagination cursor. Pass `next_cursor` from a previous response to fetch the next page. Replaces the old page number. | |
| fdv_max | No | OPTIONAL: Maximum fully diluted valuation in USD | |
| fdv_min | No | OPTIONAL: Minimum fully diluted valuation in USD | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (default: 'volume_usd_24h'). Prefer the canonical names; short legacy names are still accepted. The REST API calls this parameter order_by. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| txns_24h_min | No | OPTIONAL: Minimum number of transactions in 24h | |
| created_after | No | OPTIONAL: Only tokens created after this UNIX timestamp | |
| created_before | No | OPTIONAL: Only tokens created before this UNIX timestamp | |
| volume_24h_max | No | OPTIONAL: Maximum 24h volume in USD | |
| volume_24h_min | No | OPTIONAL: Minimum 24h volume in USD | |
| liquidity_usd_max | No | OPTIONAL: Maximum token liquidity in USD | |
| liquidity_usd_min | No | OPTIONAL: Minimum token liquidity in USD | |
| price_change_percentage_24h_max | No | OPTIONAL: Maximum 24h price change, in percent | |
| price_change_percentage_24h_min | No | OPTIONAL: Minimum 24h price change, in percent. Negatives are allowed, so -20 finds tokens down at least 20%. This is the only price-change window tokens carry; for 6h, 1h or 5m use getNetworkPoolsFilter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| next_cursor | No | |
| has_next_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds meaningful behavioral context beyond that: 'Read-only and keyless', AND-combined filters, pagination via next_cursor, default/max limit, and sort aliases. It also discloses the response wrapper, which the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: purpose, safety, sibling differentiation, examples, filter semantics, then parameter summary. No filler or redundant restatement of the schema; every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with an output schema and strong annotations, the description covers purpose, usage alternatives, response shape, filter combination semantics, pagination, defaults, and aliases. It does not need to explain return values because the output schema exists, and it leaves no major contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by grouping filters, stating they are AND-combined, noting network is required, and summarizing defaults/aliases (limit default 50 max 100, sort_by default volume_usd_24h, sort_dir default desc). It also provides real-world usage examples that clarify parameter intent, though the schema already documents each parameter individually.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: 'Get tokens on one network matching numeric thresholds'. It also names the response shape ('returned under results with has_next_page and next_cursor') and explicitly distinguishes itself from the sibling tool getTopTokens, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Choose this over getTopTokens when the user gives numeric constraints or a time window', followed by concrete example queries. It also points to an alternative for other price-change windows ('for 6h, 1h or 5m use getNetworkPoolsFilter'), which is strong usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCapabilitiesARead-onlyIdempotent
Get the static agent onboarding guide for this server: supported workflows, network name synonyms (mapping words like 'eth' to the canonical slug 'ethereum'), recommended call sequences, and common pitfalls. Read-only and keyless. Read it once at the start of a session before your first query, or when asked 'how do I use this API?', 'what order should I call things in?', or 'which slug maps to eth?'. This returns onboarding docs, not live market data; for the actual list of network slugs use getNetworks, and for coverage totals use getStats. Takes no parameters beyond a short rationale.
| Name | Required | Description | Default |
|---|---|---|---|
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | Yes | |
| server | Yes | |
| workflows | Yes | Named tool sequences for common agent tasks. |
| agent_skills | Yes | |
| documentation | Yes | |
| common_pitfalls | Yes | Known edge cases agents should be aware of. |
| network_synonyms | Yes | Canonical network id -> common alternates an agent might try. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false. The description adds 'static', 'keyless', and 'Read it once' which reinforce these traits without contradiction. It also clarifies that it returns docs, not live data, which is additional context beyond annotations. Slight deduction because it doesn't elaborate on output format or pagination, but the output schema presumably covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is ~120 words, longer than average, but every clause earns its place: purpose, contents, usage timing, trigger questions, disambiguation from siblings, and parameter note. It's front-loaded with the core purpose and then branches into usage. Slight redundancy with 'short rationale' but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a simple read-only purpose, a single parameter, and an output schema (presumably describing the guide structure), the description fully covers what the agent needs: what it returns, when to call it, what not to expect, and how to differentiate from peers. No gaps are evident.
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 provides a full description of the single `rationale` parameter (with format, length, examples, privacy note). Schema coverage is 100%, so the description doesn't need to add parameter details. The description confirms 'Takes no parameters beyond a short rationale,' which adds clarity that no other parameters exist. This is above baseline because it explicitly reiterates the parameter surface.
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 returning a static onboarding guide with specific contents (workflows, network name synonyms, call sequences, pitfalls). It explicitly contrasts with sibling tools: 'for the actual list of network slugs use getNetworks, and for coverage totals use getStats.' This is a specific verb+resource with clear scope and sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and actionable: 'Read it once at the start of a session before your first query, or when asked...' It lists trigger phrases and also states what the tool does NOT do ('returns onboarding docs, not live market data') and directs to alternatives. This is textbook 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.
getDexPoolsARead-onlyIdempotent
Get the pools belonging to one specific DEX on one network, e.g. all Uniswap v3 pools on ethereum. Proxies /networks/{network}/pools/search with a dex_name filter (the old /networks/{network}/dexes/{dex}/pools endpoint was removed): rows come back under 'results' with cursor pagination (has_next_page + next_cursor), and the 24h volume field is volume_usd_24h. Read-only and keyless. Narrower than getNetworkPools (a single exchange, not the whole chain). Use for 'show me Raydium pools', 'top pairs on PancakeSwap', or 'liquidity on Orca'. Get the dex id from getNetworkDexes or search first, and pass that response's dex_id field ('uniswap_v3'), matched case-insensitively. Do not pass its dex_name field ('Uniswap V3'): a human display name returns HTTP 200 with an empty results[] rather than an error, so an empty answer here usually means the wrong form of the name was sent. Params: network (required slug); dex (required id, e.g. 'uniswap_v3'; the REST API calls this query parameter dex_name); limit (default 10, max 100); cursor (pass previous next_cursor to page); sort_by (default 'volume_usd_24h', canonical *_24h fields, short legacy names still accepted, alias order_by); sort_dir 'asc'/'desc' (default 'desc', alias sort). The old page number is gone: page 2 and above return an error pointing at cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| dex | Yes | REQUIRED: the dex_id field from getNetworkDexes (e.g., 'uniswap_v3'), matched case-insensitively. Do not pass that response's dex_name field, the human display name (e.g., 'Uniswap V3'): it returns an empty results[] instead of an error, so a wrong value looks like a real but empty answer. The REST API calls this parameter dex_name. | |
| page | No | SUPERSEDED: the replacement endpoint is cursor-paginated and ignores page. page=1 (or 0) still works as the first page; page=2 or above returns a structured error telling you to use cursor. | |
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 10, max: 100) | |
| cursor | No | OPTIONAL: Pagination cursor. Pass `next_cursor` from a previous response to fetch the next page (read `has_next_page` to know if more remain). Replaces the old page number. | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (default: 'volume_usd_24h'). Prefer the canonical *_24h names; short legacy names such as volume_usd are still accepted and normalized. The REST API calls this parameter order_by. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| next_cursor | No | |
| has_next_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses key behavioral facts: the old endpoint was removed, the proxy endpoint is used, results live under 'results', pagination uses has_next_page/next_cursor, the 24h volume field is volume_usd_24h, and page numbers are deprecated. The empty-results pitfall for dex_name display strings is especially valuable 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 dense and front-loaded, opening with a clear purpose before moving into migration, pagination, usage, and parameter semantics. It is long, but most content earns its place. It loses one point because several parameter-level details are duplicated almost verbatim in the input schema, so the description is somewhat heavier than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters, aliases, pagination, and a migrated endpoint, this description is nearly complete: it covers output placement, cursor pagination, field-name conventions, aliases, prerequisites, and failure modes. The presence of a rich output schema means return-value details do not need to be repeated, and the description fills all significant 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?
Even though schema coverage is effectively 100%, the description adds semantic value beyond the raw properties: it clarifies that dex must be the id from getNetworkDexes, not the display name; it explains cursor usage; it distinguishes preferred sort_by/sort_dir names from legacy aliases; and it explains REST-layer parameter names. This materially improves the agent's chance of making a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb, resource, and scope: 'Get the pools belonging to one specific DEX on one network' with a concrete example of Uniswap v3 pools on ethereum. It also explicitly distinguishes the tool from getNetworkPools, so the purpose is unambiguous relative to its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear use cases ('show me Raydium pools', 'top pairs on PancakeSwap', 'liquidity on Orca'), a prerequisite chain (getNetworkDexes or search first), and an explicit exclusions: do not pass the human-readable dex_name. It also names getNetworkPools as the broader alternative, giving the agent concrete 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.
getKeyStatusARead-onlyIdempotent
Report whether this server is sending an API key and which plan the API sees. Use when calls are being rate limited or refused, or when the user asks whether their DexPaprika key is working. Takes no arguments and reads no market data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe/read-only/idempotent behavior; the description adds that it reads no market data and checks key/plan. It doesn't contradict annotations, though it could mention potential error cases, but given annotation coverage this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences convey purpose, usage, and a key constraint (no args). No redundant or verbose content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, when to use, and the nature of the output (reports key status and plan). Given the simplicity and lack of an output schema, this is sufficient for a diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 parameters), and the description explicitly confirms 'Takes no arguments,' eliminating any ambiguity about invocation.
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 (report API key sending status and plan) and distinguishes it from sibling data-fetching tools by focusing on key health, not market 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 explicitly tells when to use it (when rate-limited, refused, or user asks about key) and implies its distinct role vs. data tools, providing unambiguous usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNetworkDexesARead-onlyIdempotent
List the DEXes (exchanges) operating on one network, such as Uniswap on ethereum or Raydium on solana, returned under 'dexes' with page_info (page, total_pages). Read-only and keyless. Use for 'which DEXes are on Base?', 'does Solana have Orca?', or to get a dex id to feed into getDexPools. Scope is a single network; call getNetworks first for the slug. Params: network (required slug); limit (default 10, max 100); page (default 1, 1-indexed); sort_by (only 'pool'; legacy alias order_by); sort_dir 'asc' or 'desc' (default 'desc'; legacy alias sort).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | OPTIONAL: Page number for pagination (default: 1, 1-indexed) | |
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 10, max: 100) | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (only 'pool'). The REST API calls this parameter order_by. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction, 'asc' or 'desc' (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dexes | No | |
| page_info | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds that it's keyless, returns paginated results under 'dexes', and explains the sorting and pagination parameters. It also discloses legacy parameter aliases (sort/order_by) and clarifies that they are not deprecated at the REST layer.
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: first sentence states purpose and output, followed by key usage info, then clear parameter details. Every sentence adds value without redundancy. It front-loads critical info (read-only, keyless) and uses examples to clarify use.
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 8 parameters (with many optional and aliases), an existing output schema, and annotations covering safety, the description is complete. It specifies the network prerequisite, pagination details, sorting options, output structure, and use cases. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining the legacy aliases (order_by/sort), the valid values for sort_by ('pool'), and the default/max/1-indexed behavior for pagination. The required 'rationale' parameter is not mentioned in the description but is in the schema, so the description doesn't fully compensate for all parameters. Thus, slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it lists DEXes on a single network with examples (Uniswap on ethereum, Raydium on solana), and specifies the output fields 'dexes' and 'page_info'. It distinguishes from siblings by noting this feeds into getDexPools and is scoped to one network, contrasting with getNetworks and getDexPools.
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 clear use cases ('which DEXes are on Base?', 'does Solana have Orca?') and explicitly states the prerequisite: 'call getNetworks first for the slug'. It also implies when not to use (for pools, use getDexPools) and specifies the scope (single network).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNetworkPoolsARead-onlyIdempotent
Get the top liquidity pools across a whole network, ranked by 24h volume by default, returned under 'results' with has_next_page and next_cursor. Read-only and keyless. This is the primary chain-wide pool discovery tool. Use for 'biggest pools on ethereum', 'top trading pairs on Base', or 'most active pools on Solana'. Narrow to one exchange with getDexPools, or apply numeric/time filters with getNetworkPoolsFilter. Params: network (required slug); limit (default 10, max 100); cursor (pass previous next_cursor to page); sort_by (default 'volume_usd_24h', canonical *_24h fields, alias order_by); sort_dir 'asc' or 'desc' (default 'desc', alias sort).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 10, max: 100) | |
| cursor | No | OPTIONAL: Pagination cursor. Pass `next_cursor` from a previous response to fetch the next page. Replaces the old page number. | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (default: 'volume_usd_24h'). Prefer the canonical *_24h names; short legacy names are still accepted. The REST API calls this parameter order_by. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| next_cursor | No | |
| has_next_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful context beyond this: the tool is 'keyless', returns results under 'results' with has_next_page and next_cursor, and defaults to 24h volume ranking. 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 compact and front-loaded: purpose, response shape, key property, usage examples, alternatives, then parameter essentials. Every sentence contributes actionable information without unnecessary repetition or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, rich annotations, full schema coverage, and presence of an output schema, the description is complete: it covers scope, use cases, exclusions, defaults, pagination, aliases, and keyless access. No critical selection or invocation context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds practical guidance about aliases, preferred names, defaults, and pagination cursor usage. It omits the required 'rationale' parameter from its summary, but the schema documents that fully; overall the description adds meaningful semantic value beyond the raw 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 'top liquidity pools across a whole network', specifies default ranking by 24h volume, and identifies itself as 'the primary chain-wide pool discovery tool'. It is sharply distinguished from siblings like getDexPools and getNetworkPoolsFilter.
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 is provided with concrete natural-language examples ('biggest pools on ethereum', 'top trading pairs on Base', 'most active pools on Solana'). It also names alternatives: narrow to one exchange with getDexPools, or use filters with getNetworkPoolsFilter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNetworkPoolsFilterARead-onlyIdempotent
Get pools on one network filtered by numeric thresholds, returned under 'results' with has_next_page and next_cursor. Read-only and keyless. Choose this over getNetworkPools when the user gives numeric constraints or a time window. Use for 'pools over $1M liquidity on Base', 'pools created in the last 24h', or 'high-volume low-liquidity pairs'. Optional filters (AND-combined): volume_24h_min/max, volume_7d_min/max, liquidity_usd_min/max, txns_24h_min, created_after/created_before (Unix timestamps). Also network (required); limit (default 50, max 100); cursor to page; sort_by (default 'volume_usd_24h', alias order_by); sort_dir asc/desc (default 'desc', alias sort).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 50, max: 100) | |
| cursor | No | OPTIONAL: Pagination cursor. Pass `next_cursor` from a previous response to fetch the next page. Replaces the old page number. | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (default: 'volume_usd_24h'). Prefer the canonical *_24h names; short legacy names are still accepted. The REST API calls this parameter order_by. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| txns_24h_min | No | OPTIONAL: Minimum number of transactions in 24h | |
| created_after | No | OPTIONAL: Only pools created after this UNIX timestamp | |
| volume_7d_max | No | OPTIONAL: Maximum 7d volume in USD | |
| volume_7d_min | No | OPTIONAL: Minimum 7d volume in USD | |
| created_before | No | OPTIONAL: Only pools created before this UNIX timestamp | |
| volume_24h_max | No | OPTIONAL: Maximum 24h volume in USD | |
| volume_24h_min | No | OPTIONAL: Minimum 24h volume in USD | |
| liquidity_usd_max | No | OPTIONAL: Maximum pool liquidity in USD | |
| liquidity_usd_min | No | OPTIONAL: Minimum pool liquidity in USD | |
| price_change_percentage_1h_max | No | OPTIONAL: Maximum 1h price change, in percent | |
| price_change_percentage_1h_min | No | OPTIONAL: Minimum 1h price change, in percent | |
| price_change_percentage_5m_max | No | OPTIONAL: Maximum 5m price change, in percent | |
| price_change_percentage_5m_min | No | OPTIONAL: Minimum 5m price change, in percent. The shortest window we carry, so it is the one to reach for on 'what is moving right now'. | |
| price_change_percentage_6h_max | No | OPTIONAL: Maximum 6h price change, in percent | |
| price_change_percentage_6h_min | No | OPTIONAL: Minimum 6h price change, in percent | |
| price_change_percentage_24h_max | No | OPTIONAL: Maximum 24h price change, in percent | |
| price_change_percentage_24h_min | No | OPTIONAL: Minimum 24h price change, in percent. Negatives are allowed, so -20 finds pools down at least 20%. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| next_cursor | No | |
| has_next_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by stating 'keyless' (no auth requirement), that filters are AND-combined, documenting defaults (limit 50/max 100, sort_by/sort_dir defaults), and noting aliases. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences plus a filter enumeration. Front-loaded with purpose and the key sibling differentiator. While somewhat dense given 25 parameters, every clause earns its place: purpose, read-only/keyless, when-to-use with examples, filter list, required/default/alias info. No filler, but a bit heavy 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?
For a 25-parameter tool with an output schema and rich annotations, the description is thoroughly complete. It covers purpose, sibling differentiation, examples, read-only/keyless status, ALL available filters, required network param, pagination (cursor/limit), and sort defaults. The output schema handles return values, so the brief mention of 'results' with has_next_page/next_cursor 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?
Schema coverage is 100% with rich per-parameter descriptions, so baseline is 3. The description adds genuine cross-parameter semantics not in the schema: the AND-combination of filters, which params are required, default values for limit/sort_by/sort_dir, and the alias relationships (sort_by/order_by, sort_dir/sort). This provides real value beyond the structured 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?
Uses a specific verb+resource: 'Get pools on one network filtered by numeric thresholds'. Explicitly distinguishes itself from sibling getNetworkPools by naming it and describing the differentiator (numeric constraints/time windows). The three concrete example queries reinforce the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use directive: 'Choose this over getNetworkPools when the user gives numeric constraints or a time window.' Provides three concrete user-query examples ('pools over $1M liquidity on Base', 'pools created in the last 24h', 'high-volume low-liquidity pairs') that map to filters. Clearly implies the alternative for non-numeric queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getNetworksARead-onlyIdempotent
List every blockchain network DexPaprika indexes, each row carrying its network id (slug), 24h volume, transaction count, and pool count. Read-only and keyless. Start here (or getCapabilities) to get the exact network slug that nearly every other tool requires as its 'network' argument. Use for 'which chains do you support?', 'is Base/Solana/Arbitrum covered?', or 'what is the slug for Polygon?'. Returns the full array with no pagination or sorting; takes no parameters beyond a short rationale. For platform-wide totals rather than a per-network list use getStats.
| Name | Required | Description | Default |
|---|---|---|---|
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| networks | Yes | All supported blockchain networks with current 24h volume + indexing stats. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds 'Read-only and keyless', explains no pagination/sorting, and describes the rationale parameter's purpose. 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 well-structured, front-loaded with main purpose, and every sentence provides essential information. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema, the description fully covers return data (full array, no pagination), usage scenarios, and parameter semantics. 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?
Schema coverage is 100% with description for rationale parameter. Description adds extra guidance on rationale: required, 1-2 sentences, logged for improvement, no PII/secrets, and references server instructions. This adds meaningful context 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 it lists every blockchain network DexPaprika indexes with specific fields (slug, 24h volume, etc.). Distinguishes from siblings like getStats and getCapabilities by noting it provides network slugs needed by other 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 says when to use: to get network slugs, to check chain support, to find slug for Polygon. Also tells when not to use: for platform-wide totals, use getStats instead. Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPoolDetailsARead-onlyIdempotent
Get the full current snapshot for one pool by address: its two tokens, current price, liquidity/TVL, 24h volume, and transaction counts, returned as a single pool object (not a list). Read-only and keyless. Use after search or getNetworkPools surfaces a pool, or for 'price/TVL of this pool?' or 'details for pool 0x...'. Returns live values only; for historical candles use getPoolOHLCV, and for the raw swap feed use getPoolTransactions. Params: network (required slug); pool_address (required, e.g. '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640'); inversed (optional bool, default false, flips the token price ratio to token1/token0).
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| inversed | No | OPTIONAL: Whether to invert the price ratio (default: false) | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| pool_address | Yes | REQUIRED: Pool address or identifier (e.g., '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640') |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| fee | No | |
| chain | No | |
| dex_id | No | |
| tokens | No | |
| dex_name | No | |
| created_at | No | |
| factory_id | No | |
| last_price | No | |
| price_time | No | |
| price_stats | No | |
| last_price_usd | No | |
| token_reserves | No | |
| created_at_block_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that it is keyless, returns live values only, and returns a single object not a list. 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 fairly concise with a clear first sentence, then usage guidelines and parameter details. Could be slightly more streamlined, but each sentence serves a 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 4 parameters and output schema, description covers purpose, usage, parameter semantics, and behavioral traits thoroughly. References sibling tools and explains when to use 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 coverage is 100%, so baseline 3. Description adds value by explaining the inversed parameter flips token1/token0 ratio, giving a pool_address example, and emphasizing network is a required slug.
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 a full current snapshot for one pool by address, listing specific data items (tokens, price, liquidity, etc.). It explicitly distinguishes from siblings like getPoolOHLCV and getPoolTransactions.
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 (after search or getNetworkPools, for price/TVL queries) and when not to (for historical candles use getPoolOHLCV, for raw swap feed use getPoolTransactions). No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPoolOHLCVARead-onlyIdempotent
Get historical OHLCV candles (open, high, low, close, volume) for one pool over a time range, returned as a time-series array. Read-only and keyless. Use for 'price history of this pair', 'hourly chart for the last week', 'candles since Jan 1', or backtesting; for the single current price use getPoolDetails instead. Params: network (required); pool_address (required); start (required; Unix timestamp, RFC3339, or yyyy-mm-dd); end (optional, capped to 1 year after start); interval one of '1m','5m','10m','15m','30m','1h','6h','12h','24h' (default '24h'); limit (default 100, max 366 candles); inversed (optional bool, default false).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | OPTIONAL: End time for historical data (max 1 year from start) | |
| limit | No | OPTIONAL: Number of data points to retrieve (default: 100, max: 366) | |
| start | Yes | REQUIRED: Start time for historical data (Unix timestamp, RFC3339 timestamp, or yyyy-mm-dd format) | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| interval | No | OPTIONAL: Interval granularity (default: '24h') | 24h |
| inversed | No | OPTIONAL: Whether to invert the price ratio for alternative pair perspective (default: false) | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| pool_address | Yes | REQUIRED: Pool address or identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| ohlcv | Yes | Open-High-Low-Close-Volume rows ordered by time_open ascending. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds 'Read-only and keyless' and notes that end is capped to 1 year after start, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single long sentence but front-loaded with purpose and usage. While comprehensive, it could be more concise with bullet points. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, 4 required, and an output schema present, the description covers all necessary aspects: purpose, usage, parameter details, and sibling differentiation. Leaves no gaps 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?
Schema coverage is 100%, but description adds extra meaning: accepted formats for start (Unix timestamp, RFC3339, yyyy-mm-dd), cap on end, interval granularities, and default values. Significantly enriches 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?
Explicitly states it retrieves historical OHLCV candles for one pool over a time range, with specific verb 'Get' and resource 'OHLCV candles'. Clearly distinguishes from sibling 'getPoolDetails' for current price.
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 ('price history of this pair', 'hourly chart for the last week') and explicitly names alternative tool ('use getPoolDetails instead').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPoolTransactionsARead-onlyIdempotent
Get one pool's recent individual swap transactions, newest first, returned under 'transactions' (paginate with page, or a cursor). Read-only and keyless. These are per-trade records, not aggregated candles (use getPoolOHLCV) or a summary snapshot (use getPoolDetails). Use for 'recent trades on this pool', 'who swapped in the last hour', or 'raw transaction feed'. Params: network (required); pool_address (required); limit (default 10, max 100); page (default 1, up to 100 pages) or cursor (a transaction id); from (optional Unix seconds, inclusive, capped to the last 7 days); to (optional Unix seconds, exclusive, must be after from).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | OPTIONAL: Filter transactions up to this UNIX timestamp (exclusive). Must be after 'from'. | |
| from | No | OPTIONAL: Filter transactions starting from this UNIX timestamp (inclusive). Results always capped to last 7 days. | |
| page | No | OPTIONAL: Page number for pagination, up to 100 pages (default: 1, 1-indexed) | |
| limit | No | OPTIONAL: Number of items per page (default: 10, max: 100) | |
| cursor | No | OPTIONAL: Transaction ID used for cursor-based pagination | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| pool_address | Yes | REQUIRED: Pool address or identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
| page_info | Yes | |
| transactions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds key behaviors: 'keyless', pagination via page/cursor, time filter with 7-day cap, and result structure ('under transactions'). 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?
Concise yet comprehensive: core action first, then differentiation, use cases, parameter details. Every sentence adds value; 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 output schema exists (not shown), return values need no further explanation. All parameters are fully covered, behavior and constraints clear. Completes the picture for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches understanding with defaults, limits, pagination types, and time constraints. It explains response format and parameter relationships 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 retrieves a pool's recent swap transactions, newest first, and distinguishes itself from related tools like getPoolOHLCV and getPoolDetails.
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 cases ('recent trades on this pool', 'who swapped in the last hour', 'raw transaction feed') and contrasts with other tools ('not aggregated candles' or summary snapshots).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getStatsARead-onlyIdempotent
Get platform-wide totals for DexPaprika: the number of networks, DEXes, pools, and tokens indexed, returned as a single summary object. Read-only and keyless. Use for 'how much data do you cover?', 'how many chains or pools total?', or a one-line coverage summary. These are ecosystem-wide counts, not per-network figures; use getNetworks for the per-chain breakdown, or getCapabilities for onboarding docs. Takes no parameters beyond a short rationale.
| Name | Required | Description | Default |
|---|---|---|---|
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pools | Yes | Total pools indexed across all chains. |
| chains | Yes | Total chains indexed. |
| tokens | Yes | Total tokens indexed. |
| factories | Yes | Total DEX factory contracts indexed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds 'Read-only and keyless' which reinforces and slightly extends the annotation-provided behavioral context (auth requirements). 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 front-loaded with the main purpose in the first sentence and is composed of 5 concise sentences. Slight redundancy ('Read-only and keyless' standalone) but overall efficient with 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 simple, read-only tool with an output schema, the description fully covers what the tool returns, common use cases, and exclusions. It is complete given the tool's low complexity and the presence of annotations and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter (rationale), so baseline is 3. The description mentions 'Takes no parameters beyond a short rationale' but adds no additional meaning beyond what the schema's parameter description already 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 retrieves platform-wide totals for networks, DEXes, pools, and tokens as a single summary object. It distinguishes itself from siblings like getNetworks and getCapabilities by specifying it returns ecosystem-wide counts, not per-network figures.
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 example use cases ('how much data do you cover?', 'how many chains or pools total?') and advises when to use alternatives (getNetworks for per-chain breakdown, getCapabilities for onboarding docs). This provides excellent guidance on when to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTokenDetailsARead-onlyIdempotent
Get one token's data and metadata by contract address on one network: multi-timeframe price and volume metrics, plus name, website, Twitter, and Telegram links, returned as a single token object. Read-only and keyless. Use for 'price and volume for 0x... on Base' or 'tell me about this token'. If you only have a symbol like WETH, call search first to resolve the address and network. For many tokens' prices at once use getTokenMultiPrices; for the pools holding this token use getTokenPools. Params: network (required slug); token_address (required contract address, e.g. 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN' on solana).
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| token_address | Yes | REQUIRED: Token contract address (e.g., 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN' for Jupiter on Solana) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| chain | No | |
| symbol | No | |
| summary | No | |
| website | No | |
| added_at | No | |
| decimals | No | |
| has_image | No | |
| description | No | |
| price_stats | No | |
| total_supply | No | Raw on-chain total supply. Big numbers may overflow JS Number, so handle as string for tokens with 18+ decimals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false. The description adds 'Read-only and keyless' which reinforces the safety profile and adds the keyless auth detail beyond annotations. Doesn't disclose rate limits but annotations carry the load appropriately.
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?
Every sentence earns its place: main description, usage example, symbol-resolution edge case, and sibling pointer. The final sentence is an info-dense list of both alternatives in a compact form. No fluff, no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there's an output schema (return value documented elsewhere), 100% param coverage, and rich annotations, the description is complete. It covers edge cases (symbol-only queries), access model (keyless), and disambiguation from 17 siblings. Nothing important is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the network param is a 'slug', providing a real example for token_address, and adding entity resolution workflow guidance ('call search first') that anticipates a common failure mode not 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?
Specific verb ('Get') + resource ('one token's data and metadata by contract address') + scope ('on one network'). Clearly distinguishes from siblings by explicitly naming getTokenMultiPrices and getTokenPools as alternatives for different needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('price and volume for 0x... on Base'), what to do with only a symbol ('call search first to resolve the address'), and explicit alternatives ('use getTokenMultiPrices', 'use getTokenPools'). This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTokenMultiPricesARead-onlyIdempotent
Get current USD prices for up to 10 tokens on the same network in one batched call, returned as a prices array plus a missing_tokens list. Read-only and keyless. Tokens that cannot be priced come back in missing_tokens rather than being dropped, so check that list for partial failures. Use for 'prices for these tokens', 'compare the price of X, Y and Z', or building a portfolio/dashboard snapshot. For one token with full metadata and multi-timeframe stats use getTokenDetails. Params: network (required slug, all tokens must share it); tokens (required array of 1 to 10 contract addresses).
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | Yes | REQUIRED: Up to 10 token contract addresses on the same network. | |
| network | Yes | REQUIRED: Network ID from getNetworks | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| prices | Yes | USD prices for the requested tokens, in input order. |
| missing_tokens | No | Input tokens that upstream could not price (invalid address, no liquidity, unknown contract). Empty array when all input tokens were resolved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint. Description adds keyless operation and partial failure behavior (missing_tokens list), which are beyond annotations, but is slightly redundant on read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three punchy sentences plus param summary; no wasted words, front-loaded with key action and constraints.
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 full schema coverage, annotations, and output schema, the description covers behavior (return format, partial failures), usage alternatives, and key constraints, making it fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). Description adds context that tokens must share the network and that network is a slug, adding 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 the tool gets current USD prices for up to 10 tokens on the same network in a batched call, distinguishes from getTokenDetails for single-token metadata, and specifies the output structure.
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 cases (portfolio/dashboard snapshot, comparing prices) and when to use alternative (getTokenDetails for one token with full metadata).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTokenPoolsARead-onlyIdempotent
Get the liquidity pools that contain a specific token on one network, returned under 'results' with has_next_page and next_cursor. Read-only and keyless. Use for 'which pools hold WETH on ethereum?' or 'liquidity venues for 0x...'. Network-scoped, so run search first if unsure of the network; unknown addresses return empty results, not an error. For the token's own price use getTokenDetails. Params: network (required); token_address (required); limit (default 10, max 100); cursor to page; sort_by (default 'volume_usd_24h', alias order_by); sort_dir asc/desc (default 'desc', alias sort). Extra params such as inversed or paired_token_address are unsupported and error.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 10, max: 100) | |
| cursor | No | OPTIONAL: Pagination cursor. Pass `next_cursor` from a previous response to fetch the next page. Replaces the old page number. | |
| address | No | UNSUPPORTED (deprecated alias of paired_token_address): passing it returns a structured error. | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| reorder | No | UNSUPPORTED (deprecated alias of inversed): passing true returns a structured error. | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (default: 'volume_usd_24h'). Prefer the canonical *_24h names; short legacy names are still accepted. The REST API calls this parameter order_by. | |
| inversed | No | UNSUPPORTED: the replacement endpoint has no pair-perspective flip. Passing true returns a structured error; invert prices client-side (1/price) instead. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. | |
| token_address | Yes | REQUIRED: Token contract address. Results are restricted to pools on the given network containing this token. Unknown addresses return empty results, not an error. | |
| paired_token_address | No | UNSUPPORTED: the replacement endpoint cannot filter by a second token. Passing it returns a structured error; filter results[].tokens client-side for pair queries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| next_cursor | No | |
| has_next_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds useful context: 'Read-only and keyless', 'unknown addresses return empty results, not an error', and 'Extra params such as inversed or paired_token_address are unsupported and error'. This goes beyond annotations by explaining error behavior and keyless access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: purpose, output structure, usage examples, network-scoping caveat, alternative tool reference, and parameter summary. It's longer than ideal but every sentence adds value. The parameter summary at the end is efficient, though it partially duplicates schema info.
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 (13 params, 4 enums, aliases, unsupported params), the description covers the essential usage patterns, error cases, and alternatives. The output schema exists, so return values are documented. The description could mention pagination behavior more explicitly, but the cursor parameter and next_cursor reference in the description cover it adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter. The description adds value by summarizing key parameters (network, token_address, limit, cursor, sort_by, sort_dir) and explicitly flagging unsupported parameters (inversed, paired_token_address) that would error. It also clarifies aliases (sort_by/order_by, sort_dir/sort) which the schema also documents, but the description's summary helps the agent quickly understand the parameter landscape.
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: 'Get the liquidity pools that contain a specific token on one network' with specific output structure ('returned under results with has_next_page and next_cursor'). It distinguishes from siblings by mentioning network-scoping and pointing to getTokenDetails for price queries.
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 guidance: 'Use for which pools hold WETH on ethereum? or liquidity venues for 0x...' and 'For the token's own price use getTokenDetails'. Also gives clear when-not-to-use: 'Network-scoped, so run search first if unsure of the network' and notes unknown addresses return empty results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTopTokensARead-onlyIdempotent
Get the top tokens on one network ranked by volume, liquidity, transactions, FDV, or 24h price change, returned under 'results' with has_next_page and next_cursor. Read-only and keyless. Use for 'top gainers on Solana', 'highest-volume tokens on Base', or 'biggest tokens by FDV on ethereum'. For arbitrary numeric filters or a time window use filterNetworkTokens instead. Params: network (required slug); limit (default 50, max 100); cursor (pass previous next_cursor to page); sort_by (default 'volume_usd_24h', alias order_by), noting that ranking by raw price is unsupported and silently falls back to volume; sort_dir asc/desc (default 'desc', alias sort).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | OPTIONAL: alias of sort_dir; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes sort, so use this name when calling the REST API directly. | |
| limit | No | OPTIONAL: Number of items per page (default: 50, max: 100) | |
| cursor | No | OPTIONAL: Pagination cursor. Pass `next_cursor` from a previous response to fetch the next page. Replaces the old page number. | |
| network | Yes | REQUIRED: Network ID from getNetworks (e.g., 'ethereum', 'solana') | |
| sort_by | No | OPTIONAL (preferred): Field to sort by (default: 'volume_usd_24h'). Prefer the canonical names; short legacy names are still accepted. The REST API calls this parameter order_by. | |
| order_by | No | OPTIONAL: alias of sort_by; both are accepted. Not deprecated at the REST layer: api.dexpaprika.com itself takes order_by, so use this name when calling the REST API directly. | |
| sort_dir | No | OPTIONAL (preferred): Sort direction (default: 'desc'). The REST API calls this parameter sort. | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| next_cursor | No | |
| has_next_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Expands beyond annotations: notes keyless access, pagination response format, and the critical caveat that sorting by raw price silently falls back to volume. Annotations already cover idempotent/read-only; description adds operational detail.
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 yet comprehensive: first sentence states purpose, second gives usage guidance, third details parameters. No extraneous text; information 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?
Covers all aspects: purpose, parameters, pagination, caveats, and alternative tool. Output schema exists so return format is adequately summarized. 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 100% schema coverage, description adds value: explains aliases (sort->sort_dir, order_by->sort_by), default/max for limit, cursor usage, and the price sorting fallback. Schema alone doesn't provide this context.
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 top tokens ranked by various metrics (volume, liquidity, etc.) and gives concrete examples ('top gainers on Solana'). Distinguishes from sibling filterNetworkTokens.
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 (top tokens by specific metrics) and when not to (arbitrary numeric filters or time window), directing to filterNetworkTokens. Also mentions read-only and keyless.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Search across ALL networks at once for tokens, pools, and DEXes by name, symbol, or address, returning three arrays: 'tokens', 'pools', and 'dexes'. Read-only and keyless. This is the cross-chain entry point when you do not yet know which network something lives on; once you have a network slug from the results, switch to the network-scoped tools. Use for 'find PEPE', 'what is the address for USDC', or 'which chain is this token on?'. No matches returns empty arrays, not an error. Params: query (required; a name, symbol, or contract address, e.g. 'uniswap', 'bitcoin', or '0x...'); limit (optional, caps results per category, applied client-side).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | OPTIONAL: Max results per category (tokens/pools/dexes), applied client-side | |
| query | Yes | REQUIRED: Search term (e.g., 'uniswap', 'bitcoin', or a token address) | |
| rationale | Yes | REQUIRED. 1-2 sentence rationale for this call (e.g. "User asked for X; calling Y to fetch Z"). Logged for MCP improvement, never shown to end users. No PII or secrets. See the server `instructions` field for the full convention and worked examples. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dexes | No | |
| pools | No | |
| tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds behavioral details: 'Read-only and keyless', and explains that no matches return empty arrays not errors. It also clarifies limit is applied client-side.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-organized paragraph that front-loads the main purpose, then covers return, usage context, behavior, and parameter details. 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?
The description fails to mention the required 'rationale' parameter, which is present in the schema. This is a significant omission for a parameter that must be supplied. Otherwise, the description covers most other aspects adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the description adds examples for query (e.g., '0x...') and explains limit application. This provides practical guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches across all networks for tokens, pools, and DEXes, returning three arrays. It distinguishes itself by specifying it is the cross-chain entry point when network is unknown, and advises switching to network-scoped tools once a slug is known.
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 when to use (when you do not know the network) and when not (once you have a network slug, use network-scoped tools). It also gives concrete search examples like 'find PEPE' and 'which chain is this token on?'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, covering different aspects of DEX data such as networks, exchanges, pools, tokens, statistics, and search. Overlaps are minimal and descriptions clearly differentiate similar tools like getNetworkPools, getDexPools, and getNetworkPoolsFilter.
All tool names follow a consistent 'get' prefix followed by a descriptive noun phrase in camelCase (e.g., getPoolTransactions, getNetworkDexes). No mixing of naming conventions or inconsistent verb usage.
With 16 tools, the set is well-scoped for a DEX data server covering multiple blockchains. Each tool serves a specific function without redundancy, and the count is within the ideal range for such a domain.
The tools provide comprehensive coverage for querying DEX data: network enumeration, exchange and pool listing, filtering, detailed snapshots, transaction history, OHLCV data, token metadata, multi-price queries, cross-chain search, and platform statistics. No obvious gaps in CRUD or lifecycle operations are present.
Maintenance
Related MCP Connectors
MCP server giving AI agents one-connection access to crypto & DeFi data: DeFi protocol TVL, stableco
The Dappier MCP server connects LLMs and AI agents to real-time, rights-cleared, proprietary data from trusted sources across various domains. It provides specialized knowledge through real-time web search, financial stock market and crypto data access, AI-powered content recommendations from premium publishers, and structured outputs with sub-300ms response times, enabling AI systems to respond to current events and trends.
Unlock the power of real-time cryptocurrency data with our Crypto Price Insights MCP server.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that tracks and analyzes DEX liquidity pools to power intelligent DeFi agents and automated strategies.12MIT
- AlicenseNot gradedqualityFmaintenanceOfficial MCP server that turns The Graph’s Token API into a plug-and-play web3 data tool. Exposes ERC-20 & NFT metadata, balances, transfers, top-holder stats, prices, and more, allowing LLMs to run SQL queries on structured and indexed blockchain data.2Apache 2.0
- AlicenseAqualityDmaintenanceProvides real-time access to cryptocurrency and DEX data across multiple blockchains, enabling users to analyze tokens, pools, trading volumes, and perform technical analysis through DexPaprika's API. No API keys required for seamless integration with AI assistants.11119MIT
- AlicenseAqualityDmaintenanceA comprehensive cryptocurrency market-data MCP server with 49 tools across six data sources, enabling LLMs to answer market questions via natural language.49MIT
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/coinpaprika/dexpaprika-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server