Track Multiple AWBs by Carrier
trackAwbsByCarrierTrack multiple AWB numbers from a specific carrier by providing the carrier ID and up to 200 AWB numbers. Supports language selection for responses.
Instructions
Track multiple AWB numbers from a specific carrier. Parameters: carrier_id (required - accepts numbers like 3 and strings like '3'), awb_list (array, max 200, required), language (optional, default 'ro')
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| carrier_id | Yes | Carrier ID: 1=Cargus, 2=DPD, 3=FAN Courier, 4=GLS, 6=Sameday, 16=Bookurier | |
| awb_list | Yes | Array of AWB numbers to track (1-200) | |
| language | No | Language for tracking responses: ro (default), de, en, fr, hu, bg |
Implementation Reference
- Registration and handler for the trackAwbsByCarrier tool. Defines the input schema (carrier_id, awb_list, language), calls the API client, and formats the response.
export function registerTrackAwbsByCarrierTool(server: McpServer): void { // Create API client instance // Register trackAwbsByCarrier tool server.registerTool( "trackAwbsByCarrier", { title: "Track Multiple AWBs by Carrier", description: "Track multiple AWB numbers from a specific carrier. Parameters: carrier_id (required - accepts numbers like 3 and strings like '3'), awb_list (array, max 200, required), language (optional, default 'ro')", inputSchema: { carrier_id: z .union([ z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(6), z.literal(16), ]) .describe( "Carrier ID: 1=Cargus, 2=DPD, 3=FAN Courier, 4=GLS, 6=Sameday, 16=Bookurier", ), awb_list: z .array(z.string()) .min(1) .max(200) .describe("Array of AWB numbers to track (1-200)"), language: z .enum(["ro", "de", "en", "fr", "hu", "bg"]) .optional() .describe( "Language for tracking responses: ro (default), de, en, fr, hu, bg", ), }, }, async (args: any) => { // Get API key from async context const apiKey = apiKeyStorage.getStore(); if (!apiKey) { return { content: [ { type: "text", text: "Error: X-API-KEY header is required", }, ], }; } // Create API client with customer's API key const client = new EuroparcelApiClient(apiKey); try { const carrierId = args.carrier_id; const language = args.language || "ro"; logger.info("Tracking AWBs by carrier", { carrier_id: carrierId, awb_count: args.awb_list.length, language, }); const trackingInfo = await client.trackAwbsByCarrier( carrierId, args.awb_list, language, ); logger.info(`Retrieved tracking info for ${trackingInfo.length} AWBs`); let formattedResponse = `📍 Tracking Results for Carrier #${carrierId} (${trackingInfo.length} AWBs):\n\n`; if (trackingInfo.length === 0) { formattedResponse += "No tracking information found for the provided AWBs."; } else { trackingInfo.forEach((info) => { formattedResponse += `📦 AWB: ${info.awb}\n`; if (info.order_id) { formattedResponse += ` Order ID: ${info.order_id}\n`; } formattedResponse += ` Carrier: ${info.carrier}\n`; formattedResponse += ` Status: ${info.current_status} (ID: ${info.current_status_id})\n`; formattedResponse += ` Description: ${info.current_status_description}\n`; formattedResponse += ` Final Status: ${info.is_current_status_final ? "Yes" : "No"}\n`; if (info.track_url) { formattedResponse += ` Track URL: ${info.track_url}\n`; } if (info.reference) { formattedResponse += ` Reference: ${info.reference}\n`; } formattedResponse += "\n"; }); } return { content: [ { type: "text", text: formattedResponse, }, ], }; } catch (error: any) { logger.error("Failed to track AWBs", error); return { content: [ { type: "text", text: `Error tracking AWBs: ${error.message || "Unknown error"}`, }, ], }; } }, ); logger.info("trackAwbsByCarrier tool registered successfully"); } - Input schema using Zod for the trackAwbsByCarrier tool: carrier_id (union of literals 1-16), awb_list (array of strings, 1-200), language (optional enum).
inputSchema: { carrier_id: z .union([ z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(6), z.literal(16), ]) .describe( "Carrier ID: 1=Cargus, 2=DPD, 3=FAN Courier, 4=GLS, 6=Sameday, 16=Bookurier", ), awb_list: z .array(z.string()) .min(1) .max(200) .describe("Array of AWB numbers to track (1-200)"), language: z .enum(["ro", "de", "en", "fr", "hu", "bg"]) .optional() .describe( "Language for tracking responses: ro (default), de, en, fr, hu, bg", ), }, - src/api/client.ts:369-383 (helper)API client helper method that POSTs to /orders/track-by-awb with carrier_id, awb_list, and language parameters.
async trackAwbsByCarrier( carrierId: number, awbList: string[], language?: string, ): Promise<AwbTrackingInfo[]> { const response = await this.client.post<AwbTrackingInfo[]>( "/orders/track-by-awb", { carrier_id: carrierId, awb_list: awbList, language: language || "ro", }, ); return response.data; } - src/types/index.ts:294-306 (schema)Type definition for AwbTrackingInfo, the response shape returned by trackAwbsByCarrier.
export interface AwbTrackingInfo { order_id?: number; carrier_id: number; carrier: string; awb: string; track_url: string; current_status: string; current_status_id: number; current_status_description: string; is_current_status_final: boolean; reference: string; history: OrderHistoryItem[]; } - src/tools/orders/index.ts:5-19 (registration)Registration of trackAwbsByCarrier in the orders index module. Imports and invokes registerTrackAwbsByCarrierTool(server) as part of registerOrderTools().
import { registerTrackAwbsByCarrierTool } from "./trackAwbsByCarrier.js"; import { registerGenerateLabelLinkTool } from "./generateLabelLink.js"; import { registerTrackOrdersByIdsTool } from "./trackOrdersByIds.js"; import { registerPricingTools } from "./getPricing.js"; import { registerCreateOrderTool } from "./createOrder.js"; import { logger } from "../../utils/logger.js"; export function registerOrderTools(server: McpServer): void { logger.info("Registering order tools..."); // Register all order-related tools registerGetOrdersTool(server); registerGetOrderByIdTool(server); registerCancelOrderTool(server); registerTrackAwbsByCarrierTool(server);