getOrderDetails
Retrieve comprehensive order information including status, execution details, and account data for TradeStation trading activities using specific order identifiers.
Instructions
Get detailed information for a specific order
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Account ID (optional, uses TRADESTATION_ACCOUNT_ID from env if not provided) | |
| orderId | Yes | Order ID |
Input Schema (JSON Schema)
{
"properties": {
"accountId": {
"description": "Account ID (optional, uses TRADESTATION_ACCOUNT_ID from env if not provided)",
"type": "string"
},
"orderId": {
"description": "Order ID",
"type": "string"
}
},
"required": [
"orderId"
],
"type": "object"
}
Implementation Reference
- src/index.ts:594-626 (handler)Handler function that authenticates and fetches detailed order information from the TradeStation API for the given account and order ID.async (args) => { try { const accountId = args.accountId || TS_ACCOUNT_ID; const { orderId } = args; if (!accountId) { throw new Error('Account ID is required. Either provide accountId parameter or set TRADESTATION_ACCOUNT_ID in .env file.'); } const orderDetails = await makeAuthenticatedRequest( `/brokerage/accounts/${encodeURIComponent(accountId)}/orders/${encodeURIComponent(orderId)}` ); return { content: [ { type: "text", text: JSON.stringify(orderDetails, null, 2) } ] }; } catch (error: unknown) { return { content: [ { type: "text", text: `Failed to fetch order details: ${error instanceof Error ? error.message : 'Unknown error'}` } ], isError: true }; } }
- src/index.ts:119-122 (schema)Zod schema for validating the tool's input parameters: optional accountId and required orderId.const orderDetailsSchema = { accountId: z.string().optional().describe('Account ID (optional, uses TRADESTATION_ACCOUNT_ID from env if not provided)'), orderId: z.string().describe('Order ID') };
- src/index.ts:590-627 (registration)Registers the getOrderDetails tool with the MCP server, specifying name, description, schema, and handler function.server.tool( "getOrderDetails", "Get detailed information for a specific order", orderDetailsSchema, async (args) => { try { const accountId = args.accountId || TS_ACCOUNT_ID; const { orderId } = args; if (!accountId) { throw new Error('Account ID is required. Either provide accountId parameter or set TRADESTATION_ACCOUNT_ID in .env file.'); } const orderDetails = await makeAuthenticatedRequest( `/brokerage/accounts/${encodeURIComponent(accountId)}/orders/${encodeURIComponent(orderId)}` ); return { content: [ { type: "text", text: JSON.stringify(orderDetails, null, 2) } ] }; } catch (error: unknown) { return { content: [ { type: "text", text: `Failed to fetch order details: ${error instanceof Error ? error.message : 'Unknown error'}` } ], isError: true }; } } );
- src/index.ts:179-230 (helper)Utility function used by the handler to make authenticated HTTP requests to the TradeStation API.async function makeAuthenticatedRequest( endpoint: string, method: AxiosRequestConfig['method'] = 'GET', data: any = null ): Promise<any> { const userTokens = tokenStore.get(DEFAULT_USER); if (!userTokens) { throw new Error('User not authenticated. Please set TRADESTATION_REFRESH_TOKEN in .env file.'); } // Check if token is expired or about to expire (within 60 seconds) if (userTokens.expiresAt < Date.now() + 60000) { // Refresh the token const newTokens = await refreshToken(userTokens.refreshToken); tokenStore.set(DEFAULT_USER, newTokens); } try { const options: AxiosRequestConfig = { method, url: `${TS_API_BASE}${endpoint}`, headers: { 'Authorization': `Bearer ${tokenStore.get(DEFAULT_USER)?.accessToken}`, 'Content-Type': 'application/json', 'Accept': 'application/json' }, timeout: 60000 }; if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) { options.data = data; } const response = await axios(options); return response.data; } catch (error: unknown) { if (error instanceof AxiosError) { const errorMessage = error.response?.data?.Message || error.response?.data?.message || error.message; const statusCode = error.response?.status; console.error(`API request error [${statusCode}]: ${errorMessage}`); console.error('Endpoint:', endpoint); throw new Error(`API Error (${statusCode}): ${errorMessage}`); } else if (error instanceof Error) { console.error('API request error:', error.message); throw error; } else { console.error('Unknown API request error:', error); throw new Error('Unknown API request error'); } } }