Install
openclaw skills install @cfanlu/skillhub客户发来几百上千行工业品询价单,还在逐条查型号、核规格、找价格、回填表格?MRO 询价匹配让 AI 帮你完成这些重复工作:支持文字、Excel、CSV 询价,按型号、品牌、标准及关键规格筛选商品,输出首选、备选、参考价格和匹配依据,并将结果回填 Excel。支持优先匹配自己的商品清单;规格不清、存在差异的行明确标记“待确认”,方便人工复核与客户沟通。让报价员少花时间查资料,把精力留给选型判断和促成订单。适合 MRO 经销商、报价团队及采购人员,使用前需配置 MRO API Key。
openclaw skills install @cfanlu/skillhub使用MRO API 从已接入的工业品资料中检索候选。匹配结果用于询价和选型参考;商品规格、适用性、价格、库存与交期以原始数据源及供应商最终确认为准。
运行前阅读 市场安装与费用说明。需要用户自己的MRO API 账号和密钥;在线匹配及商品详情可能消耗积分。询价检索条件会发送到 API,Excel 导出需要宿主 Agent 具备表格读写能力。
调用前确认用户已在 MRO API 平台 注册并创建 API Key。没有账号或 API Key 时,先引导用户完成注册和获取,不要匿名调用、猜测密钥或使用内部服务。
MCP 地址:https://mro-api.iwilley.com/v1/mcp
API Key 可通过以下任一请求头传递:
Authorization: Bearer <API_KEY>apikey: <API_KEY>X-API-Key: <API_KEY>不要把 API Key 写入代码、Skill、询价文件或最终结果。需要限定数据源时,在每个请求中显式传入用户已获授权的 sources;网关会按账号权限执行最终限制。
开始本轮任务时调用一次免费 list_sources,读取 sources 和 privateProductCount。REST 对应 GET /v1/sources(数据位于 data),附带客户端支持 sources 子命令。来源查询失败要报告错误,不把失败当作私有清单为空。
用户明确指定只查某些来源时遵从其范围;否则,私有数量大于 0 时先在每个匹配请求中传 sources:["mine"]。mine 始终指 API Key 所属账号自己的清单,不传账号 ID,也不修改来源代码来访问其他账号。
私有匹配按下方相同流程核对分类和属性;只有当前私有查询 candidateCount=0 才对该行回退公共来源。公共请求省略 sources,由网关使用该账号授权的公共范围;重新读取公共分类及属性,不沿用私有分面值。私有清单为空则直接查公共来源。超时、403、429、5xx 或其他工具错误不属于零结果,按失败处理。批量仅将零结果行组成下一批,并保留原行对应关系。
私有和公共匹配均按正常规则扣费,来源元数据免费。结果如实标注“我的商品(mine)”或公共来源;不能因为来自用户清单就降低规格确认要求。私有商品可能没有外部详情链接,缺失时保留名称文本并说明,不自行拼接链接。
优先使用 Streamable HTTP MCP。若当前 Agent 不能注册远程 MCP、但可以运行 Python,则使用随 Skill 附带的 scripts/mro_api_client.py 调用同一套 HTTPS REST 接口;它支持单条匹配、商品详情和本地并发批处理。详细用法见 portability.md。
脚本仅依赖 Python 标准库。将 API Key 放在 MRO_API_KEY 环境变量;可选 MRO_API_BASE_URL 默认为 https://mro-api.iwilley.com。不要将密钥作为命令行参数、写进代码或输出到结果中。
无、不限)时,候选商品有品牌是正常目录信息,不构成品牌替代。提取客户零件编码、产品名称、品牌、制造商型号 MPN、标准号、关键规格、普通规格和否定要求。客户自有零件编码仅用于回填原表,除非有明确证据,否则不要当作 MPN。
英文描述先识别产品类型并翻译为准确的中文检索词;型号、标准号和尺寸原样保留。
mpn 查询,不预先限制品牌;在候选中核对品牌和关键规格。无法定案时,再另发 keyword 请求。keyword 全字段初筛。keyword 会检索商品名称、描述、MPN、品牌、品类和属性,仅作为召回条件,不作为最终规格证据。
首轮设置 includeAttributes=false、includeProducts=false,读取 candidateCount、categories.items 和 brands.items。
选择与客户产品类型一致的一个或多个分类 key。同一产品类型在不同资料源中使用不同分类时,可把多个分类一起提交;数组内为 OR。不要从测试仪、传感器、附件等不相关分类中强行选择候选。
无分类商品不会被丢弃;需要单独检查时使用 categories=["uncategorized"]。
确认分类后,以相同的 mpn 或 keyword 加 categories,设置 includeAttributes=true、includeProducts=false,查看当前候选的真实属性名和值。
同一客户规格的不同供应商写法放进一个 anyOf 组,组内 OR;不同规格分组,组间 AND。每个 anyOf 项必须分别包含 name 和 value:
{
"requested": "12mm",
"anyOf": [
{"name": "直径(mm)", "value": "12"},
{"name": "适用钢丝绳直径(mm)", "value": "12"}
]
}
不要在属性组外层传 name。属性名和值必须从分布结果复制实际写法,不要自行猜测单位或格式。可以在下一次调用中一次提交全部关键属性。
保留已确认的分类和全部关键属性,设置:
{
"includeFacets": false,
"includeAttributes": false,
"includeProducts": true
}
最多返回 6 件商品。products[0] 是当前匹配层级内价格排序后的首选,其余最多 5 件用于“其他匹配项”。不要把较低 matchTier 的商品混入其他匹配项。
对首选以及确有必要核查的候选调用 get_product(source, sourceId),确认产品类型、品牌、关键规格、否定条件和原始证据。标题、描述与原始属性冲突时,以原始属性为主要证据,并标记冲突。
更详细的属性优先级、回退和无结果归因见 matching-rules.md。
客户写明的数值规格与候选原始属性不完全相同(例如扎带 4×350 对候选 4.2×350)时,不能仅因行业常用名义规格而判为精确匹配;除非客户或业务规则已明确该容差可接受,否则标记“待确认”,并写出实际差异。
处理 Excel、CSV 或多条文本询价时,优先使用 batch_match_inquiries。同一批只放处于相同阶段且互不依赖的请求:
默认每批最多 10 条,避免随着数据源和属性分布增长而产生过大的响应、超时或高额模型 token 消耗。只有首轮纯摘要请求(responseMode="summary",不返回分面和商品)可以每批放到 20 条。属性分布较大、最终商品核查或定点精筛仍建议每批 5–10 条。请求项不要传 index,按响应 results[].index 对回当前批次数组位置,并逐项检查 result 或 error。
先对重复描述或型号去重。只有前一步结果已经返回后,才能构造同一行的下一步请求。详细字段和性能开关见 api-usage.md。
文本询价至少返回:
Excel/CSV 必须保留原列,并追加:首选订货号、品牌、商品名称、人民币价格、匹配状态、匹配依据、待确认事项、其他匹配项和数据源。逐行保留无结果或待确认原因。
Excel(.xlsx)中的“商品名称”单元格必须保留首选商品名称作为显示文本,并添加可点击的商品详情页超链接,使用蓝色下划线样式。链接取自该首选商品 get_product(source, sourceId) 返回的 productPageUrl,须与本行首选订货号、数据源和原表 ID 对应;仅使用返回的有效 HTTP/HTTPS 地址,不根据订货号或数据源自行拼接链接。通过单元格超链接属性写入,不把商品名称替换为 URL 或公式。
详情页地址缺失或无效时,商品名称保留普通文本,并在“待确认事项”中注明“商品详情页链接缺失”。该情况本身不改变规格匹配状态。未找到商品的行不添加超链接。
CSV 无法保存带显示文本的单元格超链接;导出 CSV 时保留“商品名称”,另追加“商品详情页URL”列,填写同一首选商品的有效 productPageUrl,缺失时留空。
导出前检查行数未改变、原列未覆盖、结果与原行一一对应,以及商品名称超链接(CSV 的 URL 列)与首选商品对应,并确保文件中不包含 API Key。