klines
Retrieve candlestick chart data for cryptocurrency trading symbols to analyze price movements and market trends over specified time intervals.
Instructions
Get Kline/candlestick bars for a symbol.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | No | End time in ms | |
| interval | Yes | Kline interval (e.g., 1m, 5m, 1h, 1d) | |
| limit | No | Number of results. Default 500, max 1500. | |
| startTime | No | Start time in ms | |
| symbol | Yes | Trading symbol |
Implementation Reference
- src/index.ts:597-598 (handler)Handler for the 'klines' tool. Dispatches the tool call by making a GET request to the '/fapi/v1/klines' endpoint on the AsterDex API using the makeRequest utility.case 'klines': return makeRequest('GET', '/fapi/v1/klines', args);
- src/index.ts:107-121 (schema)Schema definition and registration of the 'klines' tool in the listTools response, including input schema with required symbol and interval parameters.{ name: 'klines', description: 'Get Kline/candlestick bars for a symbol.', inputSchema: { type: 'object', properties: { symbol: { type: 'string', description: 'Trading symbol' }, interval: { type: 'string', description: 'Kline interval (e.g., 1m, 5m, 1h, 1d)' }, startTime: { type: 'number', description: 'Start time in ms' }, endTime: { type: 'number', description: 'End time in ms' }, limit: { type: 'number', description: 'Number of results. Default 500, max 1500.' }, }, required: ['symbol', 'interval'], }, },
- src/index.ts:542-602 (helper)Shared helper function makeRequest that performs HTTP requests to the AsterDex API, handles signing for authenticated endpoints, and formats responses for MCP.const makeRequest = async (method: 'GET' | 'POST' | 'DELETE', path: string, params: any, isSigned = false) => { try { let config: any = { method, url: path, }; if (isSigned) { if (!API_KEY || !API_SECRET) { throw new McpError(ErrorCode.InvalidRequest, 'API_KEY and API_SECRET must be configured.'); } params.timestamp = Date.now(); const queryString = new URLSearchParams(params).toString(); const signature = crypto.createHmac('sha256', API_SECRET).update(queryString).digest('hex'); params.signature = signature; config.headers = { 'X-MBX-APIKEY': API_KEY }; } if (method === 'GET' || method === 'DELETE') { config.params = params; } else { // POST config.data = new URLSearchParams(params).toString(); config.headers = { ...config.headers, 'Content-Type': 'application/x-www-form-urlencoded' }; } const response = await this.axiosInstance.request(config); return { content: [{ type: 'text', text: JSON.stringify(response.data, null, 2) }] }; } catch (error) { if (axios.isAxiosError(error)) { throw new McpError( ErrorCode.InternalError, `Aster API error: ${error.response?.data?.msg || error.message}` ); } throw error; } }; switch (name) { // Market Data Endpoints case 'ping': return makeRequest('GET', '/fapi/v1/ping', {}); case 'time': return makeRequest('GET', '/fapi/v1/time', {}); case 'exchangeInfo': return makeRequest('GET', '/fapi/v1/exchangeInfo', {}); case 'depth': return makeRequest('GET', '/fapi/v1/depth', args); case 'trades': return makeRequest('GET', '/fapi/v1/trades', args); case 'historicalTrades': return makeRequest('GET', '/fapi/v1/historicalTrades', args); case 'aggTrades': return makeRequest('GET', '/fapi/v1/aggTrades', args); case 'klines': return makeRequest('GET', '/fapi/v1/klines', args); case 'indexPriceKlines': return makeRequest('GET', '/fapi/v1/indexPriceKlines', args); case 'markPriceKlines': return makeRequest('GET', '/fapi/v1/markPriceKlines', args);