get-structure-orders
Retrieve all market orders within a specific EVE Online structure by providing the structure ID. Ideal for accessing real-time market data and managing in-game trade efficiently.
Instructions
Get all market orders in a structure
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page to query, starts at 1 | |
| structure_id | Yes | Structure ID to get market orders from |
Implementation Reference
- src/index.ts:391-413 (handler)Handler function that constructs the ESI endpoint for structure market orders, fetches the orders using makeESIRequest, formats them by mapping to a subset of fields, and returns as JSON text content.async ({ structure_id, page }) => { const endpoint = `/markets/structures/${structure_id}/${page ? `?page=${page}` : ''}`; const orders = await makeESIRequest<MarketOrder[]>(endpoint); return { content: [ { type: "text", text: JSON.stringify(orders.map(order => ({ order_id: order.order_id, type_id: order.type_id, price: order.price, volume_remain: order.volume_remain, volume_total: order.volume_total, is_buy_order: order.is_buy_order, duration: order.duration, issued: order.issued, range: order.range })), null, 2) } ] }; }
- src/index.ts:387-390 (schema)Zod input schema defining parameters for the tool: structure_id (required number) and page (optional number).{ structure_id: z.number().describe("Structure ID to get market orders from"), page: z.number().optional().describe("Which page to query, starts at 1"), },
- src/index.ts:384-414 (registration)Registration of the 'get-structure-orders' tool with McpServer using server.tool method, specifying name, description, input schema, and handler function.server.tool( "get-structure-orders", "Get all market orders in a structure", { structure_id: z.number().describe("Structure ID to get market orders from"), page: z.number().optional().describe("Which page to query, starts at 1"), }, async ({ structure_id, page }) => { const endpoint = `/markets/structures/${structure_id}/${page ? `?page=${page}` : ''}`; const orders = await makeESIRequest<MarketOrder[]>(endpoint); return { content: [ { type: "text", text: JSON.stringify(orders.map(order => ({ order_id: order.order_id, type_id: order.type_id, price: order.price, volume_remain: order.volume_remain, volume_total: order.volume_total, is_buy_order: order.is_buy_order, duration: order.duration, issued: order.issued, range: order.range })), null, 2) } ] }; } );
- src/index.ts:29-42 (schema)TypeScript interface defining the structure of MarketOrder objects returned by the ESI API, used in the handler's type annotation.interface MarketOrder { duration: number; is_buy_order: boolean; issued: string; location_id: number; min_volume: number; order_id: number; price: number; range: string; system_id: number; type_id: number; volume_remain: number; volume_total: number; }
- src/index.ts:222-256 (helper)Helper function for making authenticated ESI API requests, handling rate limits, errors, and headers; used by the tool handler to fetch orders.async function makeESIRequest<T>(endpoint: string, token?: string): Promise<T> { if (!checkRateLimit(endpoint)) { throw new Error("Rate limit exceeded. Please try again later."); } const headers: Record<string, string> = { "User-Agent": USER_AGENT, "Accept": "application/json", }; if (token) { headers["Authorization"] = `Bearer ${token}`; } const response = await fetch(`${ESI_BASE_URL}${endpoint}`, { headers }); updateRateLimit(endpoint, response.headers); if (!response.ok) { let errorMessage = `HTTP error! status: ${response.status}`; try { const errorData = await response.json() as ESIError; if (errorData.error) { errorMessage = `ESI Error: ${errorData.error}`; if (errorData.error_description) { errorMessage += ` - ${errorData.error_description}`; } } } catch { // エラーJSONのパースに失敗した場合は、デフォルトのエラーメッセージを使用 } throw new Error(errorMessage); } return response.json() as Promise<T>; }