getPoolOHLCV
Retrieve historical OHLCV data for decentralized exchange pools to analyze price trends, perform backtesting, and create visualizations across multiple blockchain networks.
Instructions
Get historical price data (OHLCV) for a pool - essential for price analysis, backtesting, and visualization. Requires network and pool address.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| network | Yes | Network ID from getNetworks (e.g., "ethereum", "solana") | |
| poolAddress | Yes | Pool address or identifier | |
| start | Yes | Start time for historical data (Unix timestamp, RFC3339 timestamp, or yyyy-mm-dd format) | |
| end | No | End time for historical data (max 1 year from start) | |
| limit | No | Number of data points to retrieve (max 366) - adjust for different analysis needs | |
| interval | No | Interval granularity: 1m, 5m, 10m, 15m, 30m, 1h, 6h, 12h, 24h | 24h |
| inversed | No | Whether to invert the price ratio for alternative pair perspective (e.g., ETH/USDC vs USDC/ETH) |
Implementation Reference
- src/index.js:207-214 (handler)Handler function that constructs the DexPaprika API endpoint for retrieving historical OHLCV data for a specific pool and formats the response for MCP.async ({ network, poolAddress, start, end, limit, interval, inversed }) => { let endpoint = `/networks/${network}/pools/${poolAddress}/ohlcv?start=${encodeURIComponent(start)}&interval=${interval}&limit=${limit}&inversed=${inversed}`; if (end) { endpoint += `&end=${encodeURIComponent(end)}`; } const data = await fetchFromAPI(endpoint); return formatMcpResponse(data); }
- src/index.js:198-206 (schema)Zod schema defining the input parameters for the getPoolOHLCV tool, including network, pool address, time range, limit, interval, and inversion option.{ network: z.string().describe('Network ID from getNetworks (e.g., "ethereum", "solana")'), poolAddress: z.string().describe('Pool address or identifier'), start: z.string().describe('Start time for historical data (Unix timestamp, RFC3339 timestamp, or yyyy-mm-dd format)'), end: z.string().optional().describe('End time for historical data (max 1 year from start)'), limit: z.number().optional().default(1).describe('Number of data points to retrieve (max 366) - adjust for different analysis needs'), interval: z.string().optional().default('24h').describe('Interval granularity: 1m, 5m, 10m, 15m, 30m, 1h, 6h, 12h, 24h'), inversed: z.boolean().optional().default(false).describe('Whether to invert the price ratio for alternative pair perspective (e.g., ETH/USDC vs USDC/ETH)') },
- src/index.js:195-215 (registration)MCP server.tool registration for the getPoolOHLCV tool, including name, description, schema, and handler.server.tool( 'getPoolOHLCV', 'Get historical price data (OHLCV) for a pool - essential for price analysis, backtesting, and visualization. Requires network and pool address.', { network: z.string().describe('Network ID from getNetworks (e.g., "ethereum", "solana")'), poolAddress: z.string().describe('Pool address or identifier'), start: z.string().describe('Start time for historical data (Unix timestamp, RFC3339 timestamp, or yyyy-mm-dd format)'), end: z.string().optional().describe('End time for historical data (max 1 year from start)'), limit: z.number().optional().default(1).describe('Number of data points to retrieve (max 366) - adjust for different analysis needs'), interval: z.string().optional().default('24h').describe('Interval granularity: 1m, 5m, 10m, 15m, 30m, 1h, 6h, 12h, 24h'), inversed: z.boolean().optional().default(false).describe('Whether to invert the price ratio for alternative pair perspective (e.g., ETH/USDC vs USDC/ETH)') }, async ({ network, poolAddress, start, end, limit, interval, inversed }) => { let endpoint = `/networks/${network}/pools/${poolAddress}/ohlcv?start=${encodeURIComponent(start)}&interval=${interval}&limit=${limit}&inversed=${inversed}`; if (end) { endpoint += `&end=${encodeURIComponent(end)}`; } const data = await fetchFromAPI(endpoint); return formatMcpResponse(data); } );
- src/index.js:10-33 (helper)Shared helper function to make API requests to DexPaprika, with comprehensive error handling for 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; }
- src/index.js:37-46 (helper)Shared helper function to format API data into the MCP response structure.function formatMcpResponse(data) { return { content: [ { type: "text", text: JSON.stringify(data) } ] }; }