placeOrder
Execute cryptocurrency trades on Aster Finance by submitting buy or sell orders with various order types including limit, market, stop, and take profit orders.
Instructions
Send in a new order.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| positionSide | No | ||
| price | No | ||
| quantity | No | ||
| side | Yes | ||
| stopPrice | No | ||
| symbol | Yes | ||
| timeInForce | No | ||
| type | Yes |
Implementation Reference
- src/index.ts:625-626 (handler)Handler for the 'placeOrder' tool: executes a signed POST request to the Aster API endpoint '/fapi/v1/order' using the shared makeRequest function with the provided arguments.case 'placeOrder': return makeRequest('POST', '/fapi/v1/order', args, true);
- src/index.ts:243-256 (schema)Input schema for the 'placeOrder' tool, defining parameters such as symbol, side, type, quantity, price, etc., with required fields.inputSchema: { type: 'object', properties: { symbol: { type: 'string' }, side: { type: 'string', enum: ['BUY', 'SELL'] }, positionSide: { type: 'string', enum: ['BOTH', 'LONG', 'SHORT'] }, type: { type: 'string', enum: ['LIMIT', 'MARKET', 'STOP', 'STOP_MARKET', 'TAKE_PROFIT', 'TAKE_PROFIT_MARKET', 'TRAILING_STOP_MARKET'] }, timeInForce: { type: 'string', enum: ['GTC', 'IOC', 'FOK', 'GTX'] }, quantity: { type: 'number' }, price: { type: 'number' }, stopPrice: { type: 'number' }, }, required: ['symbol', 'side', 'type'], },
- src/index.ts:240-257 (registration)Registration of the 'placeOrder' tool in the ListTools response, including name, description, and input schema.{ name: 'placeOrder', description: 'Send in a new order.', inputSchema: { type: 'object', properties: { symbol: { type: 'string' }, side: { type: 'string', enum: ['BUY', 'SELL'] }, positionSide: { type: 'string', enum: ['BOTH', 'LONG', 'SHORT'] }, type: { type: 'string', enum: ['LIMIT', 'MARKET', 'STOP', 'STOP_MARKET', 'TAKE_PROFIT', 'TAKE_PROFIT_MARKET', 'TRAILING_STOP_MARKET'] }, timeInForce: { type: 'string', enum: ['GTC', 'IOC', 'FOK', 'GTX'] }, quantity: { type: 'number' }, price: { type: 'number' }, stopPrice: { type: 'number' }, }, required: ['symbol', 'side', 'type'], }, },
- src/index.ts:542-579 (helper)Shared helper function 'makeRequest' that performs authenticated HTTP requests to the Aster API, used by the placeOrder handler for signed POST requests.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; } };