query_order.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. class QueryOrderTool:
  2. name = 'query_order'
  3. route_path = '/mcp/tools/queryOrder'
  4. def __init__(self, api_client=None):
  5. self.api_client = api_client
  6. def metadata(self):
  7. return {
  8. 'name': self.name,
  9. 'description': (
  10. '使用场景:仅兼容旧版跨字段通用搜索;只有用户明确要求把同一号码'
  11. '同时作为订单号、客户参考号、快递单号、排舱单号、柜号和SO号搜索,'
  12. '并且目标是查看订单列表时使用。禁止使用:用户已明确号码类型时必须'
  13. '改用 query_order_exact;用户只说“单号”“这个号码”或号码类型不明确时'
  14. '必须先询问用户,确认前不得调用。不得根据号码格式猜测,不得并行调用'
  15. '候选工具,不得跨字段或跨工具试查,查询无结果后也不得换字段重试。'
  16. '本工具返回订单列表,不返回排舱列表、排舱详情、物流轨迹、报关资料文件'
  17. '或导出文件。'
  18. ),
  19. 'input_schema': {
  20. 'type': 'object',
  21. 'properties': {
  22. 'keyword': {
  23. 'type': 'string',
  24. 'description': (
  25. '旧版跨字段通用搜索值。只有用户明确接受同时搜索订单号、'
  26. '客户参考号、快递单号、排舱单号、柜号和SO号时才可传入。'
  27. ),
  28. },
  29. 'page': {'type': 'integer', 'minimum': 1},
  30. 'limit': {'type': 'integer', 'minimum': 1, 'maximum': 100},
  31. },
  32. 'required': ['keyword'],
  33. },
  34. }
  35. def call(self, keyword, page=1, limit=20, request_id='rq_query_order'):
  36. if self.api_client is None:
  37. raise RuntimeError('api client is required for query_order')
  38. keyword = str(keyword).strip()
  39. if not keyword:
  40. raise ValueError('keyword is required')
  41. page = max(1, int(page))
  42. limit = max(1, min(100, int(limit)))
  43. payload = {
  44. 'keyword': keyword,
  45. 'page': page,
  46. 'limit': limit,
  47. }
  48. return self.api_client.call_tool(self.name, self.route_path, payload, request_id)