initialize、tools/list 和 tools/call;能力声明保持 tools.listChanged=false。tools/list 返回本地 11 个候选工具与 fmsoperate 动态启用列表的交集。tools/call 在调用前再次校验工具已注册、设备会话有效且后端仍允许当前员工使用该工具。result 中并设置 isError=true,不得中断 stdio 或 HTTP 会话;协议、参数或未知方法错误使用 JSON-RPC error。call 保留工具原始 code/msg/data/meta 信封,不经过面向 Workbuddy 的 Presenter。| 类别 | 工具 | 核心要求 |
|---|---|---|
| 查询 | query_order |
保持旧展示协议兼容 |
| 查询 | query_order_exact、query_track |
只在结果意图和号码类型明确后调用 |
| 查询 | query_customs_declaration_files |
订单号数组与排舱单号数组必须二选一 |
| 查询 | query_outbound_list |
排舱阶段必选;运输方式未指定时查询全部 |
| 查询 | query_outbound_detail |
只按明确排舱单号查询,不接受内部排舱 ID |
| 筛选 | list_outbound_filter_options |
统一返回排舱阶段、运输方式、集货仓库、是否直送柜、拖车、报关和清关七类选项 |
| 筛选 | list_order_filter_options |
返回当前员工可用的精准订单筛选值 |
| 筛选 | list_pending_outbound_export_filter_options |
返回当前员工可用的未排舱导出筛选值 |
| 导出 | export_pending_outbound_orders |
复用筛选工具返回值,不猜测内部 ID |
| 导出 | export_out_of_province_port_data |
排舱单号、柜号、提单号、SO 号四类数组严格四选一,并要求文件类型 |
value 传给目标工具。query_order 是唯一旧展示例外,继续使用 columns + records 和原文本行为。OutputPresenter 白名单处理:4 个表格工具、1 个排舱详情工具、3 个筛选项工具和 2 个导出工具。headers + rows + pagination;排舱详情使用 summary + details + pagination;导出只返回 files[].label + files[].url。value、用户显示 label 和业务 code,但不得泄露未列入白名单的后端字段。request_id 放在 MCP 结果 _meta;安全工具的业务错误使用固定中文消息,不透传后端 msg、异常数据、堆栈或原始响应。OutputPresenter.ERROR_MESSAGES、NON_RETRYABLE_CODES 为代码源;未知业务码对外归一为 MCP_9001。GWS_xxx 查找 Redis Gateway session,并从服务端会话取得 mcp_token;不得把 token 返回给客户端。rq_http_* 追踪号;调用方 X-Request-Id 只允许记录短哈希,不得作为可信追踪号。initialize 与 tools/list 不限流;tools/call 按已认证的 gateway_session_id + tool_name 使用独立滑动窗口配额。tools.listChanged=false,工具或 Schema 变化后必须重启 Gateway 并让客户端重新连接。.coveragerc 要求的语句、分支 100% 严格覆盖率;跨仓 PHP 变更必须运行对应合同测试与语法检查。