class QueryTrackTool: name = 'query_track' route_path = '/mcp/tools/queryTrack' def __init__(self, api_client=None): self.api_client = api_client def metadata(self): return { 'name': self.name, 'description': 'Query tracking information with the current employee permissions. Provide order_id, order_number, or tracking_number.', 'input_schema': { 'type': 'object', 'properties': { 'order_id': {'type': 'integer', 'minimum': 1, 'description': 'Order ID to query tracking for'}, 'order_number': {'type': 'string', 'description': 'Order number or track query number'}, 'tracking_number': {'type': 'string', 'description': 'Tracking number to query directly'}, 'page': {'type': 'integer', 'minimum': 1, 'default': 1}, 'limit': {'type': 'integer', 'minimum': 1, 'maximum': 100, 'default': 5}, }, }, } def call(self, order_id=None, order_number=None, tracking_number=None, page=1, limit=5, request_id='rq_query_track'): if self.api_client is None: raise RuntimeError('api client is required for query_track') if order_id is None and not order_number and not tracking_number: raise ValueError('order_id, order_number or tracking_number is required') payload = { 'page': max(1, int(page)), 'limit': max(1, min(100, int(limit))), } if order_id is not None: order_id = int(order_id) if order_id <= 0: raise ValueError('order_id must be greater than 0') payload['order_id'] = order_id if order_number: payload['order_number'] = str(order_number).strip() if tracking_number: payload['tracking_number'] = str(tracking_number).strip() return self.api_client.call_tool(self.name, self.route_path, payload, request_id)