getNetworkDexes
Retrieve decentralized exchanges (DEXes) available on a specific blockchain network. Use network IDs from getNetworks to enable paginated results for efficient data exploration.
Instructions
Get available DEXes on a specific network. First call getNetworks to see valid network IDs.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of items per page | |
| network | Yes | Network ID from getNetworks (e.g., "ethereum", "solana") | |
| page | No | Page number for pagination |
Implementation Reference
- src/index.js:82-101 (registration)Registration of the getNetworkDexes tool including name, description, input schema using Zod, and inline handler function.// getNetworkDexes server.tool( 'getNetworkDexes', 'Get available DEXes on a specific network. First call getNetworks to see valid network IDs.', { network: z.string().describe('Network ID from getNetworks (e.g., "ethereum", "solana")'), 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(['pool']).optional().describe('How to order the returned data') }, async ({ network, page, limit, sort, orderBy }) => { let endpoint = `/networks/${network}/dexes?page=${page}&limit=${limit}&sort=${sort}`; if (orderBy) { endpoint += `&order_by=${orderBy}`; } const data = await fetchFromAPI(endpoint); return formatMcpResponse(data); } );
- src/index.js:93-100 (handler)The core handler logic that builds the API endpoint for fetching DEXes on the specified network, calls the shared fetchFromAPI helper, and returns formatted MCP response.async ({ network, page, limit, sort, orderBy }) => { let endpoint = `/networks/${network}/dexes?page=${page}&limit=${limit}&sort=${sort}`; if (orderBy) { endpoint += `&order_by=${orderBy}`; } const data = await fetchFromAPI(endpoint); return formatMcpResponse(data); }
- src/index.js:86-92 (schema)Input schema validation using Zod for parameters: network (string, required), page/limit/sort/orderBy (optional with defaults).{ network: z.string().describe('Network ID from getNetworks (e.g., "ethereum", "solana")'), 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(['pool']).optional().describe('How to order the returned data') },
- src/index.js:10-34 (helper)Shared helper function used by getNetworkDexes to make API requests to DexPaprika, handling errors like 410 (deprecated endpoints) and 429 (rate limits).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; } }
- src/index.js:37-46 (helper)Shared helper function used by getNetworkDexes to format the API response into MCP-compatible text content containing JSON string.function formatMcpResponse(data) { return { content: [ { type: "text", text: JSON.stringify(data) } ] }; }