news 2026/9/16 13:49:04

Higress 商品条码查询 MCP Server:product-barcode-query 的 REST-to-MCP 配置与实现原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Higress 商品条码查询 MCP Server:product-barcode-query 的 REST-to-MCP 配置与实现原理

Higress 商品条码查询 MCP Server:product-barcode-query 的 REST-to-MCP 配置与实现原理

【免费下载链接】higress🤖 AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress

本文基于 Higress 仓库中product-barcode-queryMCP Server 的官方文档,完整讲解如何通过 REST-to-MCP 方式将一个"商品条码查询"REST API 零代码地转换为 AI 可调用的 MCP 工具:包括 AppCode 获取流程、mcp-server.yaml配置逐项解析、请求模板渲染机制、响应字段结构,以及该配置在 Higress MCP 插件源码(rest_server.go)中的对应实现。读完本文,你可以直接复制配置到 Higress 中使用,并理解每个配置项背后的模板渲染原理。

一、服务功能概述

product-barcode-query是 Higress 内置的一个商品条码查询 MCP Server(服务名定义在 mcp-server.yaml 的server.name字段),专门用于查询国内商品条形码信息。它通过 API 调用获取与指定条形码相关的商品详情,包括但不限于商品名称、品牌、价格等关键信息。

该服务特别适合需要快速、准确访问大量商品数据的应用场景,例如:

  • 电商平台:用户扫描商品条形码后,立即展示相关商品详情;
  • 库存管理系统:零售商通过条码快速检索商品资料,提升效率与准确性;
  • 消费者权益保护平台:基于条码追溯商品来源。

从 api.json 的接口描述还可以确认其能力边界:支持查询商品条形码与药品条形码,根据条码返回名称、价格、厂家等信息,实现"来源可查、去向可追"。注意:条码查询目前只支持 69 开头的 13 位或 069 开头的 14 位国内商品,进口和国外商品暂不支持查询

云市场 API MCP 服务背景

该工具并非 Higress 自研的数据服务,而是依托阿里云云市场(API 市场)提供的第三方 API,再由 Higress 以 MCP 协议托管暴露给 AI 应用。云市场的 API 服务涵盖应用开发、身份验证与金融、车辆交通与物流、企业服务、短信与运营商、AI 应用与 OCR、生活服务等多个类目;云市场 API 依托 Higress 提供 MCP 服务,只需在云市场完成订阅并获取 AppCode,通过 Higress MCP Server 配置即可无缝集成(详见 README_ZH.md 中的说明)。

二、前置条件:获取 AppCode

API 认证需要的 AppCode 需要在阿里云 API 市场申请(对应 API 市场产品编号 cmapi011032,请进入该 API 详情页完成订阅)。使用流程为:

  1. 进入 API 详情页订阅该 API,可优先使用免费试用;
  2. 前往云市场用户控制台,使用阿里云账号登录后查看已订阅 API 服务的 AppCode,并将其配置到 Higress MCP Server 的配置中;
  3. 控制台会实时展示已订阅的预付费 API 服务的可用额度,免费试用额度用完后可以重新订阅。

一个关键细节:在阿里云市场订阅 API 服务后,您将获得一个 AppCode;对于您订阅的所有 API 服务,此 AppCode 是相同的,即只需使用这一个 AppCode 即可访问所有已订阅的 API 服务。这也是mcp-server.yaml中只需在server.config配置一处appCode的原因。

三、MCP Server 配置全解析

该 MCP Server 的全部定义位于 mcp-server.yaml,采用 Higress 内置的 REST-to-MCP 配置格式,无需编写任何代码:

server: name: product-barcode-query config: appCode: "" tools: - name: barcode-query description: 国内商品条码查询 args: - name: code description: 国内商品条形码(69开头) type: string required: true position: query requestTemplate: url: https://barcode14.market.alicloudapi.com/barcode method: GET headers: - key: Authorization value: APPCODE {{.config.appCode}} - key: X-Ca-Nonce value: '{{uuidv4}}' responseTemplate: prependBody: |+ # API Response Information Below is the response from an API call. To help you understand the data, I've provided: 1. A detailed description of all fields in the response structure 2. The complete API response ## Response Structure > Content-Type: application/json - **showapi_res_body**: (Type: object) - **showapi_res_body.code**: 条形码 (Type: string) - **showapi_res_body.engName**: 英文名称 (Type: string) - **showapi_res_body.flag**: 查询结果标志 (Type: string) - **showapi_res_body.goodsName**: 商品名称 (Type: string) - **showapi_res_body.goodsType**: 商品分类 (Type: string) - **showapi_res_body.img**: 图片地址 (Type: string) - **showapi_res_body.manuName**: 厂商 (Type: string) - **showapi_res_body.note**: 备注信息 (Type: string) - **showapi_res_body.price**: 参考价格(单位:元) (Type: string) - **showapi_res_body.remark**: 查询结果备注 (Type: string) - **showapi_res_body.ret_code**: 返回代码 (Type: string) - **showapi_res_body.spec**: 规格 (Type: string) - **showapi_res_body.sptmImg**: 条码图片 (Type: string) - **showapi_res_body.trademark**: 商标/品牌名称 (Type: string) - **showapi_res_body.ycg**: 原产地 (Type: string) - **showapi_res_code**: 响应代码 (Type: integer) - **showapi_res_error**: 错误信息 (Type: string) ## Original Response

各配置项含义如下:

配置项取值/说明
server.nameMCP Server 名称product-barcode-query,插件通过该名称匹配对应 Server 的配置(参见 MCP 服务器实现指南 中 all-in-one 插件的说明)
server.config.appCode云市场 AppCode,默认留空,部署时填入;请求模板中通过{{.config.appCode}}引用
tools[].nameMCP 工具名barcode-query,即 AI 侧tools/call时使用的工具标识
tools[].args工具入参定义:code(字符串、必填、置于 query 字符串)
requestTemplate如何构造对上游 API 的 HTTP 请求(URL、Method、Headers)
responseTemplate.prependBody在原始 API 响应之前拼接的 Markdown 说明文本,帮助 LLM 理解返回数据

工具与参数说明

barcode-query工具只有一个入参:

  • code:国内商品条形码(必须以 69 开头)。这是发起请求时必需提供的参数。
    • 类型:字符串(String)
    • 必填:是
    • 位置:查询字符串(Query string)

在 OpenAPI 定义 api.json 中给出了示例值6938166920785,与"69 开头的 13 位国内商品条码"的约束一致。

请求模板详解

请求模板定义了 MCP 工具调用被转换成上游 HTTP 请求的方式:

  • URLhttps://barcode14.market.alicloudapi.com/barcode(与api.jsonservers[0].urlpaths./barcode一致)
  • Method:GET
  • Headers
    • Authorization:APPCODE {{.config.appCode}}—— 使用云市场 APPCODE 鉴权方式,值为服务器配置中注入的 AppCode;
    • X-Ca-Nonce:{{uuidv4}}—— 阿里云 API 网关要求的请求级唯一 nonce,每次调用自动生成一个 UUID。

从源码结构看,这两个模板占位符的行为在 rest_server.go 中实现:RestToolRequestTemplate结构定义了urlmethodheaders等字段,parseTemplates会将 URL 与 Headers 中的模板字符串解析为 Go template。REST-to-MCP 功能使用 GJSON Template 库做模板渲染,该库包含全部 Sprig 函数(共 70 余个),因此:

  • {{.config.appCode}}:通过.config.fieldName路径访问server.config中的配置值;
  • {{uuidv4}}:即 Sprig 提供的 UUID 生成函数(见 MCP 服务器实现指南 对模板语法的说明),保证每个请求的X-Ca-Nonce互不相同,避免被上游判定为重放。

此外,工具参数通过.args.argName路径引用,code参数由于声明了position: query,会被自动拼接到 URL 查询字符串中,最终上游请求形如:

GET /barcode?code=6938166920785 Authorization: APPCODE <你的AppCode> X-Ca-Nonce: <随机UUID> Host: barcode14.market.alicloudapi.com

四、响应结构与 responseTemplate 机制

API 响应以 JSON 格式返回,包含以下主要字段:

  • showapi_res_body:包含实际的商品信息
    • showapi_res_body.code:条形码
    • showapi_res_body.engName:英文名称
    • showapi_res_body.flag:查询结果标志
    • showapi_res_body.goodsName:商品名称
    • showapi_res_body.goodsType:商品分类
    • showapi_res_body.img:图片地址
    • showapi_res_body.manuName:厂商
    • showapi_res_body.note:备注信息
    • showapi_res_body.price:参考价格(单位:元)
    • showapi_res_body.remark:查询结果备注
    • showapi_res_body.ret_code:返回代码
    • showapi_res_body.spec:规格
    • showapi_res_body.sptmImg:条码图片
    • showapi_res_body.trademark:商标/品牌名称
    • showapi_res_body.ycg:原产地
  • showapi_res_code:响应状态码
  • showapi_res_error:错误信息(如果存在的话)

在 api.json 中,这些字段以 OpenAPI 3.0.1 的 schema 形式完整声明(showapi_res_code为 integer,showapi_res_body内各字段均为 string),可被openapi-to-mcp等工具直接消费。

prependBody:把"字段字典"喂给 LLM

responseTemplate.prependBody的设计动机很实际:上游返回的 JSON 对 LLM 而言是"裸数据",字段含义(如ycg是原产地、sptmImg是条码图片)并不自明。Higress 的做法是在返回给 AI 的最终文本前,拼接一段 Markdown 格式的字段结构说明,形成"# API Response Information → 字段描述 → ## Original Response → 原始 JSON"的结构化提示。

其执行逻辑在 rest_server.go 中可以确认:当配置了ResponseTemplate.PrependBodyAppendBody时,最终结果直接拼接为PrependBody + rawResponse + AppendBody(见RestToolResponseTemplate结构定义中的注释 "Text to insert before the response body",rest_server.go)。同时源码还约束了互斥规则:若指定了完整的Body响应模板,则不允许同时使用PrependBody/AppendBody(解析阶段会直接报错)。本配置选择了更轻量的prependBody方案,保留原始响应原文,只在前面补充解释性文字,兼顾了信息完整性与 LLM 可读性。

五、配置与 OpenAPI 的关系:该目录是如何生成的

该 MCP Server 目录下的三个文件存在明确的生成关系。从 create_api_directories.sh 脚本可以看到,云市场类 MCP Server 的标准生产流程是:

  1. 提供api.json(OpenAPI 3.0.1 定义,声明接口路径、参数、响应 schema 与服务地址);
  2. 通过openapi-to-mcp --input api.json --output mcp-server.yaml --server-name <name> --template yunmarket-tmpl.yaml生成mcp-server.yaml,其中yunmarket-tmpl.yaml模板负责注入云市场通用的APPCODE鉴权头与X-Ca-Nonce头;
  3. 再通过yaml_to_markdown.pymcp-server.yaml的内容转换后追加到README_ZH.md,形成中英文 README。

这意味着如果你新增了同类云市场 API,只需按同一流程提供api.json,即可得到一致的mcp-server.yaml与文档;而mcp-product-barcode-query中的Authorization: APPCODE {{.config.appCode}}+X-Ca-Nonce: {{uuidv4}}正是云市场模板的通用签名模式。

六、部署要点与适用前提

  • 版本要求:MCP 服务器插件需要 Higress 2.1.0 或更高版本(见 MCP 服务器实现指南)。
  • 配置入口:将mcp-server.yaml的内容作为 mcp-server 插件(或 all-in-one MCP 插件)的配置下发,并把config.appCode替换为控制台获取的真实 AppCode;插件通过server.name字段找到对应的 MCP server。
  • 能力边界:仅支持国内商品条码(69 开头的 13 位、069 开头的 14 位),进口商品不支持;免费试用额度用尽后需重新订阅。
  • 复用性:由于 REST-to-MCP 是内置能力(核心实现见 rest_server.go),此配置模式同样适用于仓库中其他云市场 MCP Server(如 mcp-agricultural-product-price-query、mcp-book-query 等,它们共用同一套APPCODE+{{uuidv4}}请求头模式)。

小结

product-barcode-query展示了 Higress "REST-to-MCP" 的典型用法:以 mcp-server.yaml 声明工具与请求模板、以 api.json 描述上游 OpenAPI 契约、以responseTemplate.prependBody增强 LLM 对响应的理解,全程零代码即可将云市场的商品条码查询 API 转化为可供 AI Agent 直接调用的 MCP 工具。相关文档可参考 英文 README 与 中文 README。

【免费下载链接】higress🤖 AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 13:48:09

Dify 工作流从零到一:3 步导入 40 多个免费 DSL 模板的实战指南

Dify 工作流从零到一&#xff1a;3 步导入 40 多个免费 DSL 模板的实战指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awes…

作者头像 李华
网站建设 2026/9/16 13:44:17

ThinkPHP收卡系统实践:卡密表设计、并发锁卡与对账机制

简介&#xff1a;新版运营版收卡网源码&#xff08;ThinkPHP收卡系统&#xff09;专为卡券回收平台搭建者设计&#xff0c;面向需要快速上线礼品卡、电子券、卡密回收业务的开发者和运营者。系统直接面对用户提交卡号卡密完成回收交易&#xff0c;可解决礼品卡闲置、资金回流缓…

作者头像 李华
网站建设 2026/9/16 13:44:09

C# 上位机通过 OPC DA 与 KEPServerEX 实现多 PLC 数据采集实战

简介&#xff1a;C#开发者或工业自动化工程师如果需要在.NET环境中与OPC Server通信&#xff0c;这份源码提供了一套开箱即用的解决方案。它基于KEPServerEX V5.14完成亲测&#xff0c;能够通过OPC DA方式读写多种品牌PLC数据&#xff0c;代码按抽象设备统一封装&#xff0c;无…

作者头像 李华
网站建设 2026/9/16 13:39:55

STM32F4扫频阻抗测试仪设计与HAL定制实践

简介&#xff1a;本资源为2019年全国大学生电子设计竞赛&#xff08;电赛&#xff09;‘简易电路特性测试仪’赛题的完整实现方案&#xff0c;面向本科阶段备赛或复盘的电子类、自动化、通信等专业学生&#xff0c;聚焦模拟电路参数测量与嵌入式系统开发能力提升。压缩包含124个…

作者头像 李华
网站建设 2026/9/16 13:39:49

IPAD协议857深度应用:构建企业级客户画像分析系统

ipad协议友情链接,点击即可访问。 背景与需求分析 随着企业客户规模扩大,业务人员与客户的微信沟通存在以下痛点: 1.沟通内容缺乏可视化监管 2.客户资源沉淀困难 3.会话数据分析难以实现 传统解决方案依赖人工抽查或专用设备(如iPad集中管理),存在成本高、扩展性差等问题…

作者头像 李华
网站建设 2026/9/16 13:39:33

用 coss Empty 原语构建 Kaneo 的空状态与恢复式 UI 实战指南

用 coss Empty 原语构建 Kaneo 的空状态与恢复式 UI 实战指南 【免费下载链接】app &#x1f3af; All you need. Nothing you dont. Open source project management that works for you, not against you. 项目地址: https://gitcode.com/GitHub_Trending/app116/app …

作者头像 李华