ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Higress 车辆限行查询 MCP Server 实战:基于阿里云云市场 API 的 REST-to-MCP 零代码接入指南

2026/9/16 11:21:23 拓冰建站 浏览量
Higress 车辆限行查询 MCP Server 实战:基于阿里云云市场 API 的 REST-to-MCP 零代码接入指南 Higress 车辆限行查询 MCP Server 实战基于阿里云云市场 API 的 REST-to-MCP 零代码接入指南【免费下载链接】higress AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress导读本文以 Higress 仓库中的vehicle-restriction-query车辆限行查询MCP Server 为核心完整讲解如何把阿里云云市场提供的「车辆尾号限行」REST API 通过 Higress 的 REST-to-MCP 能力零代码转换为可供 AI Agent 直接调用的 MCP 工具。读完本文你将掌握云市场 API 的订阅与 AppCode 获取流程、mcp-server.yaml中工具定义与请求/响应模板的完整写法、限行数据响应字段的解读方法以及该 MCP Server 在 Higress 上的部署与集成方式。一、功能简介vehicle-restriction-query能做什么vehicle-restriction-query是 Higress 仓库 plugins/wasm-go/mcp-servers/mcp-vehicle-restriction-query 目录下的一个 MCP Server 示例其数据源为阿里云云市场「极速数据」提供的车辆尾号限行 API。该服务覆盖北京、天津、杭州、成都、兰州、贵阳、南昌、长春、哈尔滨、武汉、上海、深圳等城市的车辆限行时间、区域、尾号等信息查询见目录下 api.json 的info.description。它对外暴露两个工具工具名称能力典型场景restriction-query城市限行查询接口根据城市代号与日期检索该城市的车辆限行详情需要实时获取特定地区车辆限行规则的应用程序如地图应用、导航系统、出行助手get-city-list获取城市接口返回所有可查询城市的代号与中文名列表需要向用户展示城市下拉菜单、或校验城市代号合法性的场景对 AI Agent 而言这类工具的价值在于当用户询问「明天杭州限行吗」「北京今天尾号几限行」时Agent 可以先调用get-city-list确认城市代号再调用restriction-query获取精确的限行区域、时间段和尾号规则从而给出可执行的出行建议。二、架构原理云市场 API 如何成为 MCP 工具Higress 作为基于 Envoy 的 API 网关支持通过插件机制托管 MCP Server。MCPModel Context Protocol本质上是面向 AI 更友好的 API使 AI Agent 能够更容易地调用各种工具和服务并由 Higress 统一处理认证、鉴权、限流、观测等能力详见 plugins/wasm-go/mcp-servers/README_ZH.md。车辆限行查询服务的接入链路如下用户在阿里云云市场订阅「车辆尾号限行」API获得全局唯一的AppCode开发者将 AppCode 配置到 Higress MCP Server 的server.config.appCode字段中Higress 侧通过mcp-server.yaml中的 REST-to-MCP 配置把云市场 REST API 的每个端点声明为一个 MCP 工具AI Agent 通过 MCP 协议调用工具时Higress 根据requestTemplate构造真实 HTTP 请求自动携带Authorization: APPCODE {{.config.appCode}}认证头发往云市场网关返回的 JSON 响应经responseTemplate加工为结构化说明文本后回传给 AI。整个过程无需编写任何 Go 代码纯粹依靠声明式 YAML 配置完成「REST 到 MCP」的转换。REST-to-MCP 能力内置于所有 MCP Server其底层逻辑实现在 plugins/wasm-go/pkg/mcp/server/rest_server.go 中。三、前置准备订阅 API 并获取 AppCode使用该 MCP 服务前需要完成以下三步原文档「如何在使用云市场 API MCP 服务」章节内容订阅 API进入云市场「车辆尾号限行」API 详情页订阅该 API。首次使用可优先选择免费试用额度。获取 AppCode前往云市场用户控制台使用阿里云账号登录后查看已订阅 API 服务的 AppCode并将其配置到 Higress MCP Server 的配置中。注意在云市场订阅 API 服务后获得的 AppCode 是全局统一的——对于你订阅的所有 API 服务此 AppCode 相同只需一个 AppCode 即可访问所有已订阅的 API 服务。额度管理云市场用户控制台会实时展示已订阅预付费 API 服务的可用额度免费试用额度用完后可重新订阅以继续使用。说明原文档中提到的 API 认证所需 APP Code 申请入口位于阿里云云市场 API 市场对应商品详情页本文不展开外部链接具体以云市场控制台实际展示为准。四、核心配置详解mcp-server.yaml逐段拆解vehicle-restriction-query的完整 MCP 配置位于 mcp-server.yaml。下面逐段拆解其结构。4.1 服务器定义与配置server: name: vehicle-restriction-query config: appCode: nameMCP Server 名称用于在 Higress 插件体系中标识并路由请求若集成到 all-in-one 插件该字段必须与代码中mcp.AddMCPServer()使用的名称一致详见 plugins/wasm-go/mcp-servers/README_ZH.md 中「插件配置」章节。config.appCode云市场 API 认证凭据需替换为你在云市场控制台获取的真实 AppCode。若留空网关侧Authorization头将无法通过云市场校验。4.2 工具一城市限行查询接口restriction-querytools: - name: restriction-query description: 通过城市代号和日期获取城市车辆限行信息查询。 args: - name: city description: 城市代号 type: string required: true position: query - name: date description: 日期 默认为今天 格式为2015-12-02 type: string required: true position: query参数说明对应原文档「城市限行查询接口」章节参数必填类型位置说明city是stringquery所查询城市的唯一标识符城市代号如hangzhou、beijingdate是stringquery查询的具体日期格式为2015-12-02YYYY-MM-DD缺省逻辑上默认为当日其中position: query表示参数将作为 URL 查询参数拼接到请求中这是 Higress REST-to-MCP 参数位置的合法取值之一另有path、header、cookie、body见 rest_server.go 中RestToolArg.Position的定义与注释。请求模板部分requestTemplate: url: https://jisuclwhxx.market.alicloudapi.com/vehiclelimit/query method: GET headers: - key: Authorization value: APPCODE {{.config.appCode}} - key: X-Ca-Nonce value: {{uuidv4}}url云市场 API 网关地址与路径与 api.json 中servers[0].url和paths./vehiclelimit/query完全对应method: GET与 OpenAPI 定义中的请求方法一致Authorization: APPCODE {{.config.appCode}}云市场网关的标准签名认证头{{.config.appCode}}为模板变量运行时替换为server.config中配置的 AppCode。这正是云市场 AppCode 认证机制的落地方式X-Ca-Nonce: {{uuidv4}}一次性随机数防止请求重放uuidv4是模板引擎内置的 UUID 生成函数。4.3 工具二获取城市接口get-city-list- name: get-city-list description: 获取城市代号和城市名称。 args: [] requestTemplate: url: https://jisuclwhxx.market.alicloudapi.com/vehiclelimit/city method: GET headers: - key: Authorization value: APPCODE {{.config.appCode}} - key: X-Ca-Nonce value: {{uuidv4}}args: []此接口无需额外参数输入对应原文档「获取城市接口」章节的参数说明直接调用即可返回全部支持城市请求地址指向 api.json 中的/vehiclelimit/city端点认证方式与查询接口一致。4.4 响应模板把 JSON 转成 AI 友好文本两个工具均配置了responseTemplate其核心是prependBody在返回原始 JSON 之前预先注入一段结构化的字段说明帮助大模型正确理解响应数据。以restriction-query为例responseTemplate: prependBody: | # API Response Information ... ## Response Structure Content-Type: application/json - **msg**: 消息 (Type: string) - **result**: (Type: object) - **result.area**: 限行区域描述 (Type: string) - **result.city**: 城市代码 (Type: string) - **result.cityname**: 城市名称 (Type: string) - **result.date**: 日期 (Type: string) - **result.number**: 限行号码 (Type: string) - **result.numberrule**: 限行号码规则 (Type: string) - **result.summary**: 限行规则摘要 (Type: string) - **result.time**: 限行时间段 (Type: array) - **result.time[]**: Items of type string - **result.week**: 星期 (Type: string) - **status**: 状态码 (Type: string) ## Original ResponseprependBody对应 rest_server.go 中RestToolResponseTemplate.PrependBody字段另有body用于完全重写响应、appendBody用于在响应后追加文本。由于车辆限行返回结构较规整这里选择「字段说明 原始 JSON」的组合既保留完整数据供 AI 精确解析又避免模板改写引入信息丢失。五、响应数据模型限行结果字段全解读根据 api.json 中/vehiclelimit/query的响应 Schema一次成功的查询会返回如下结构{ status: 0, msg: ok, result: { city: hangzhou, cityname: 杭州, date: 1449100800000, week: 星期四, time: [07:00-09:00, 16:30-18:30], area: 限行区域描述, summary: 本市号牌尾号限行外地号牌全部限行。法定上班的周六周日不限行。, numberrule: 最后一位数字, number: 4和6 } }各字段含义与数据类型字段类型说明statusstring状态码0表示成功msgstring响应消息成功时为okresult.citystring城市代码如hangzhouresult.citynamestring城市名称如杭州result.datestring查询日期注意示例值为毫秒时间戳实际使用以接口返回为准result.weekstring星期如星期四result.timearray限行时间段列表如[07:00-09:00, 16:30-18:30]result.areastring限行区域描述result.summarystring限行规则摘要如「本市号牌尾号限行外地号牌全部限行。法定上班的周六周日不限行。」result.numberrulestring限行号码规则如「最后一位数字」result.numberstring限行号码如4和6get-city-list接口则返回result为数组每个元素包含city城市代码与cityname城市名称的映射便于客户端将其转换为下拉菜单等展示形式。六、模板语法与底层机制理解mcp-server.yaml中的{{.config.appCode}}、{{uuidv4}}等写法需要了解 REST-to-MCP 的模板引擎。Higress 使用 GJSON Template 库进行渲染它结合了 Go 模板语法与 GJSON 的路径语法详见 plugins/wasm-go/mcp-servers/README_ZH.md 中「模板语法」与「GJSON 路径语法」章节请求模板requestTemplate用于构造 HTTP 请求的 URL、头部与正文通过.config.fieldName访问服务器配置值通过.args.argName访问工具参数值响应模板responseTemplate用于把 HTTP 响应转换为适合 AI 消费的格式使用 GJSON 路径访问 JSON 字段支持add、upper、lower等模板函数以及if、range等控制结构。GJSON Template 内置了全部 Sprig 函数70 余个本配置中用到的uuidv4即为 UUID 生成函数用于生成X-Ca-Nonce防重放随机数。从源码结构看rest_server.go 中RestToolRequestTemplate含URL、Method、Headers、Body等字段与RestToolResponseTemplate含Body、PrependBody、AppendBody正是这份 YAML 配置的 Go 结构体映射解析后的 URL/Header/Body 模板会在工具调用时被逐一渲染并执行。七、部署与集成方式7.1 作为独立 MCP Server 插件部署将mcp-server.yaml中的server.config.appCode填入真实值后即可将该配置应用到 Higress 的 MCP Server 插件。Higress 通过插件机制托管 MCP Server可获得统一认证鉴权、精细化限流、完整审计日志与可观测性等能力见 plugins/wasm-go/mcp-servers/README_ZH.md 背景章节。需注意MCP Server 插件要求 Higress 2.1.0 及以上版本。7.2 集成到 all-in-one 插件Higress 支持将多个 MCP Server 打包进同一个 all-in-one 插件共享一个 WASM 二进制每个 Server 保持独立身份与配置。vehicle-restriction-query这类基于 REST-to-MCP 的 Server 天然兼容该模式——因为 REST-to-MCP 能力内置于所有 MCP Server。集成时只需在 all-in-one 的配置中声明对应的server.name与toolsHigress 会根据name字段路由到正确的 Server。7.3 构建 WASM 二进制如需自行编译仓库 plugins/wasm-go/mcp-servers/Makefile 提供了统一的构建入口make SERVER_NAMEvehicle-restriction-query build # 构建 WASM 二进制 make SERVER_NAMEvehicle-restriction-query build-image # 构建 Docker 镜像build目标实际执行GOOSwasip1 GOARCHwasm go build -buildmodec-shared -o main.wasm main.go将 Go 代码编译为 WASI 平台的 WebAssembly 产物SERVER_NAME默认值为quark-search构建时需显式指定为本 Server 名。镜像默认推送到higress-registry.cn-hangzhou.cr.aliyuncs.com/mcp-server/仓库可通过REGISTRY、SERVER_VERSION变量覆盖。八、总结vehicle-restriction-query是一个典型的「云市场 API Higress REST-to-MCP」接入范例它展示了如何不写一行业务代码仅通过声明式 YAML 将阿里云云市场的车辆限行 REST API 包装为两个 AI 可调用的 MCP 工具restriction-query、get-city-list并通过Authorization: APPCODE请求头模板实现云市场认证、通过X-Ca-Nonce随机数防重放、通过prependBody响应模板辅助大模型理解限行数据。其配套的 api.json 提供了完整的 OpenAPI 契约mcp-server.yaml 提供了可直接落地的完整配置开发者可参照此范式快速将任意云市场 API 接入 Higress MCP 生态。【免费下载链接】higress AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考