| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- class QueryFreightowerTrackTool:
- name = 'query_freightower_track'
- route_path = '/mcp/tools/queryFreightowerTrack'
- def __init__(self, api_client=None):
- self.api_client = api_client
- def metadata(self):
- number = {
- 'type': 'string',
- 'minLength': 1,
- 'maxLength': 100,
- }
- return {
- 'name': self.name,
- 'description': (
- '使用场景:用户明确要查看飞驼现场船期和集装箱节点时使用,'
- '返回船名、航次、预计离港、预计到达、中转港/目的港/交货地,'
- '以及已经发生的轨迹节点。提单号、柜号至少提供一个;'
- '号码类型不明确时必须先询问用户是提单号还是柜号,确认前不得调用。'
- '不得根据号码格式猜测,不得跨字段或跨工具试查。'
- '禁止使用:系统里已经保存的轨迹用 query_track;'
- '本工具不导出文件,不修改干线到达或提柜状态。'
- ),
- 'input_schema': {
- 'type': 'object',
- 'properties': {
- 'bl_number': dict(number, description=(
- '提单号。仅当用户明确说明是提单号时使用,'
- '不得放入其他类型号码。'
- )),
- 'container_code': dict(number, description=(
- '柜号。仅当用户明确说明是柜号时使用,'
- '不得放入其他类型号码。'
- )),
- },
- 'additionalProperties': False,
- },
- }
- def call(
- self,
- bl_number='',
- container_code='',
- request_id='rq_query_freightower_track',
- **_ignored,
- ):
- if self.api_client is None:
- raise RuntimeError(
- 'api client is required for query_freightower_track'
- )
- payload = {}
- bl_number = self._number(bl_number, 'bl_number')
- container_code = self._number(container_code, 'container_code')
- if bl_number:
- payload['bl_number'] = bl_number
- if container_code:
- payload['container_code'] = container_code
- if not payload:
- raise ValueError('bl_number or container_code is required')
- return self.api_client.call_tool(
- self.name,
- self.route_path,
- payload,
- request_id,
- )
- @staticmethod
- def _number(value, field):
- if value in (None, ''):
- return ''
- if not isinstance(value, str):
- raise ValueError(field + ' must be a string')
- value = value.strip()
- if len(value) > 100:
- raise ValueError(field + ' must contain at most 100 characters')
- return value
|