Skip to main content
Glama
coinpaprika

DexPaprika (CoinPaprika)

Official

getDexPools

Retrieve liquidity pools from a specific decentralized exchange (DEX) on a blockchain network to analyze trading activity and token performance.

Instructions

Get pools from a specific DEX on a network. First use getNetworks, then getNetworkDexes to find valid DEX IDs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
networkYesNetwork ID from getNetworks (e.g., "ethereum", "solana")
dexYesDEX identifier from getNetworkDexes (e.g., "uniswap_v3")
pageNoPage number for pagination
limitNoNumber of items per page (max 100)
sortNoSort orderdesc
orderByNoField to order byvolume_usd

Implementation Reference

  • Handler function that fetches pool data from a specific DEX on a given network using the DexPaprika API and formats the response for MCP.
    async ({ network, dex, page, limit, sort, orderBy }) => {
      const data = await fetchFromAPI(`/networks/${network}/dexes/${dex}/pools?page=${page}&limit=${limit}&sort=${sort}&order_by=${orderBy}`);
      return formatMcpResponse(data);
    }
  • Zod schema defining the input parameters for the getDexPools tool.
    {
      network: z.string().describe('Network ID from getNetworks (e.g., "ethereum", "solana")'),
      dex: z.string().describe('DEX identifier from getNetworkDexes (e.g., "uniswap_v3")'),
      page: z.number().optional().default(0).describe('Page number for pagination'),
      limit: z.number().optional().default(10).describe('Number of items per page (max 100)'),
      sort: z.enum(['asc', 'desc']).optional().default('desc').describe('Sort order'),
      orderBy: z.enum(['volume_usd', 'price_usd', 'transactions', 'last_price_change_usd_24h', 'created_at']).optional().default('volume_usd').describe('Field to order by')
    },
  • src/index.js:121-136 (registration)
    Full registration of the getDexPools tool on the MCP server, including name, description, schema, and handler.
    server.tool(
      'getDexPools',
      'Get pools from a specific DEX on a network. First use getNetworks, then getNetworkDexes to find valid DEX IDs.',
      {
        network: z.string().describe('Network ID from getNetworks (e.g., "ethereum", "solana")'),
        dex: z.string().describe('DEX identifier from getNetworkDexes (e.g., "uniswap_v3")'),
        page: z.number().optional().default(0).describe('Page number for pagination'),
        limit: z.number().optional().default(10).describe('Number of items per page (max 100)'),
        sort: z.enum(['asc', 'desc']).optional().default('desc').describe('Sort order'),
        orderBy: z.enum(['volume_usd', 'price_usd', 'transactions', 'last_price_change_usd_24h', 'created_at']).optional().default('volume_usd').describe('Field to order by')
      },
      async ({ network, dex, page, limit, sort, orderBy }) => {
        const data = await fetchFromAPI(`/networks/${network}/dexes/${dex}/pools?page=${page}&limit=${limit}&sort=${sort}&order_by=${orderBy}`);
        return formatMcpResponse(data);
      }
    );
  • Helper function to fetch data from the DexPaprika API, handling errors like rate limits and deprecated endpoints.
    async function fetchFromAPI(endpoint) {
      try {
        const response = await fetch(`${API_BASE_URL}${endpoint}`);
        if (!response.ok) {
          if (response.status === 410) {
            throw new Error(
              'This endpoint has been permanently removed. Please use network-specific endpoints instead. ' +
              'For example, use /networks/{network}/pools instead of /pools. ' +
              'Get available networks first using the getNetworks function.'
            );
          }
          if (response.status === 429) {
            throw new Error(
              'Rate limit exceeded. You have reached the maximum number of requests allowed for the free tier. ' +
              'To increase your rate limits and access additional features, please consider upgrading to a paid plan at https://docs.dexpaprika.com/'
            );
          }
          throw new Error(`API request failed with status ${response.status}`);
        }
        return await response.json();
      } catch (error) {
        console.error(`Error fetching from API: ${error.message}`);
        throw error;
      }
    }
  • Helper function to format API responses in the MCP expected format.
    function formatMcpResponse(data) {
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(data)
          }
        ]
      };
    }

Latest Blog Posts

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