Skip to main content
Glama
questflowai

Aster Finance MCP Server

by questflowai

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
NameRequiredDescriptionDefault
positionSideNo
priceNo
quantityNo
sideYes
stopPriceNo
symbolYes
timeInForceNo
typeYes

Implementation Reference

  • 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);
  • 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'], }, },
  • 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; } };

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/questflowai/aster-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server