ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Higress 全国招中标查询 MCP Server:基于 REST-to-MCP 把云市场 API 暴露给 AI 的工具化实践

Higress 全国招中标查询 MCP Server:基于 REST-to-MCP 把云市场 API 暴露给 AI 的工具化实践 Higress 全国招中标查询 MCP Server基于 REST-to-MCP 把云市场 API 暴露给 AI 的工具化实践【免费下载链接】higress AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress本文以 Higress 仓库中的全国招中标查询 MCP Servermcp-national-bid-query为例讲解如何通过 REST-to-MCP 配置把阿里云云市场的招投标 API 转换为 AI 可直接调用的 MCP 工具覆盖 AppCode 订阅流程、三个工具列表/结构化/详情查询的完整参数说明、mcp-server.yaml配置逐段解析以及网关侧模板渲染、请求体构造与响应封装的源码级实现原理。什么是云市场 API MCP 服务阿里云云市场是生态伙伴的交易服务平台其 API 服务覆盖应用开发、身份验证与金融、车辆交通与物流、企业服务、短信与运营商、AI 应用与 OCR、生活服务等多个类目。云市场 API 依托 Higress 提供 MCPModel Context Protocol服务用户只需在云市场完成订阅并获取 AppCode再将其配置到 Higress MCP Server 中即可将云市场 API 无缝集成进 AI 应用让 AI Agent 以标准工具调用的方式访问招投标数据。使用前置订阅 API 并获取 AppCode按 README_ZH.md 说明使用本 MCP 服务前需要完成以下步骤进入阿里云 API 市场该 API 的详情页产品编号 cmapi00066410订阅该 API可优先使用免费试用额度使用阿里云账号登录云市场用户控制台查看已订阅 API 服务的 AppCode并配置到 Higress MCP Server 的配置中。需要注意的是订阅 API 服务后获得的 AppCode 对该账号订阅的所有 API 服务是相同的只需使用这一个 AppCode 即可访问所有已订阅的服务云市场用户控制台会实时展示已订阅的预付费 API 服务可用额度若免费试用额度用完可重新订阅。AppCode 对应本 MCP Server 配置中的server.config.appCode字段下文会展示它在请求头模板中的具体使用方式。服务器功能与工具简介该 MCP Serverserver 名称为national-bid-query主要用于处理和查询招中标项目信息通过集成一系列特定工具提供从列表检索到详情获取的全方位服务每个工具针对不同业务需求设计以提高数据访问效率并简化信息管理流程。它由三个工具组成分别对应云市场 API 的三个端点完整端点与请求/响应 schema 见同目录的 api.json为 OpenAPI 3.0.1 规范基地址为https://gov.market.alicloudapi.com工具一bid-query招中标项目列表查询允许用户根据多种条件筛选出符合条件的招中标项目列表适用于需要广泛搜索或初步了解市场动态的场景。对应端点POST /queryProject。参数说明结合 mcp-server.yaml 中的类型、必填性与position标注参数类型必填位置说明cityCodestring否body市编码以地级市身份证号码前四位 00表示该信息在返回参数中可能没有返回classIdstring是body信息类别1招标2中标endDatestring是body查询结束日期格式yyyy-MM-ddkeywordstring否body关键词搜索pageIndexinteger是body当前页码pageSizeinteger是body每页显示数量proviceCodestring否body省编码省或直辖市所在地区身份证号前两位 0000例如贵州省编码为520000searchModeinteger是body搜索模式1全部2标题3内容searchTypeinteger是body搜索业务类别1智能订阅搜索2精准订阅搜索3高级定义条件搜索startDatestring是body查询开始日期格式yyyy-MM-ddapi.json中给出的调用示例值为keyword服务器、cityCode441300惠州、proviceCode440000广东、startDate2023-03-01、endDate2023-03-15。工具二bid-detail招中标项目结构化查询提供对单个招中标项目的详细结构化信息查询特别适合深入了解具体项目的细节如代理机构、甲乙双方联系人与电话、中标/预算金额等。对应端点POST /getStructureDetail。参数类型必填位置说明idstring是body项目信息 ID示例值125829541publishTimestring是body项目信息发布时间示例值2023-01-18 22:41:27工具三bid-project招中标项目详情查询用于获取指定招中标项目的全面信息包括标题、正文内容、发布时间等对于希望获得最详尽资料的用户非常有用。对应端点POST /getProject。参数类型必填位置说明idstring是body项目信息 IDpublishTimestring是body项目信息发布时间从返回结构看以api.json中的示例为准列表查询返回的分页元数据包括total、hasNext、maxCount、pageNumber、startdate/enddate、seKeyWords等条目字段包括id、title、content、publish、score、hasFile/isHasFile、cityCode、proviceCode、newsTypeID等结构化查询返回agencyName、agencyContactPersons、partyA/PartyB*联系人及电话数组、bidMoney、budgetMoney、collectUrl等字段详情查询返回title、content、publish、isFollowUp、classid等字段。配置解析mcp-server.yaml 如何完成 REST 到 MCP 的映射本 MCP Server 没有手写 Go 代码而是完全由声明式 YAML 驱动这正是 Higress 内置的 REST-to-MCP 能力。核心配置骨架如下摘自 mcp-server.yamlserver: name: national-bid-query # MCP 服务器名称须与插件配置中 server.name 完全一致 config: appCode: # 云市场订阅后获得的 AppCode实际部署时填入 tools: - name: bid-query description: 招中标项目列表查询 args: - name: classId description: 信息类别( 1招标2中标) type: string required: true position: body # ... 其余参数cityCode/endDate/keyword/pageIndex/pageSize/proviceCode/searchMode/searchType/startDate requestTemplate: url: https://gov.market.alicloudapi.com/queryProject method: POST headers: - key: Content-Type value: application/x-www-form-urlencoded - key: Authorization value: APPCODE {{.config.appCode}} - key: X-Ca-Nonce value: {{uuidv4}} responseTemplate: prependBody: | # API Response Information ... ## Response Structure Content-Type: application/json - **code**: (Type: integer) - **data**: (Type: object) - **data.data**: (Type: array) - **data.data[].id**: (Type: integer) ... - **msg**: (Type: string) ## Original Response配置要点认证头三个工具的requestTemplate.headers均要求携带Content-Type: application/x-www-form-urlencoded、Authorization: APPCODE {{.config.appCode}}与X-Ca-Nonce。其中{{.config.appCode}}通过模板引用server.config下的appCode配置项模板引擎中.config.fieldName访问配置值、.args.argName访问工具参数X-Ca-Nonce使用{{uuidv4}}模板函数在每次调用时生成一个随机 UUID作为 API 网关侧要求的防重放随机数。参数全部position: body由于未显式指定argsToJsonBody/argsToUrlParam/argsToFormBody参数位置归类由position字段决定三个工具的所有参数都被归入 body 参数集合。responseTemplate 使用prependBody与body字段对响应做完整模板渲染不同prependBody只会在原始响应前拼接一段文本。本配置拼接的内容是一段Response Structure字段字典——逐字段列出响应结构如data.data[].cityCode (Type: string)随后以## Original Response收尾保留原始 JSON 响应。这样 AI 在消费工具结果时既能读到人读的字段语义说明又能拿到完整原始数据显著降低了模型对响应字段的误读。源码约束body与prependBody/appendBody不能同时使用配置校验会直接报错见 rest_server.go 中parseTemplates的校验逻辑约 L207-L211。源码级原理REST-to-MCP 在网关内如何执行REST-to-MCP 是 Higress 所有 MCP 服务器的内置能力核心实现位于 plugins/wasm-go/pkg/mcp/server/rest_server.go。结合本 MCP Server 的配置一次工具调用的执行链路如下参数类型转换RestMCPTool.Create约 L392-L469将 MCP 调用传入的 JSON 参数按声明类型转换——本配置中pageIndex/pageSize/searchMode/searchType声明为integer即使 LLM 传入字符串数字也会被转换为 intclassId等string类型参数原样保留。未提供的可选参数会应用default值。参数位置归类Call中按argPositions将参数分为 path/query/header/cookie/body 五类约 L645-L676。本服务所有参数均为body进入bodyArgs。请求体构造由于配置头中已声明Content-Type: application/x-www-form-urlencoded且存在 body 参数源码走表单编码分支约 L795-L804将bodyArgs编码为a1b2形式的 form-urlencoded 请求体——这恰好满足云市场 API 对application/x-www-form-urlencoded的要求若头中声明的是 JSON 类型则默认序列化为 JSON body。头模板渲染Authorization与X-Ca-Nonce两个头在每次调用时分别渲染为APPCODE 实际AppCode和一个新生成的 UUID。发起调用并处理响应通过ctx.RouteCall发起 POST 请求约 L861。响应回调中非 2xx 状态码会触发errorResponseTemplate若配置或统一错误返回2xx 响应中由于本配置使用的是prependBody结果直接拼接为字段字典 原始 JSON约 L907-L918并通过 MCP 协议作为工具结果文本回传给 AI 客户端。此外plugins/wasm-go/pkg/mcp/server/rest_server_test.go 等测试文件覆盖了模板解析、安全方案securitySchemes/defaultUpstreamSecurity等行为的回归验证本服务未使用securitySchemes等高级字段AppCode 直接通过头模板注入这是云市场 AppCode 认证场景的典型用法。部署与调用方式将本 MCP Server 配置到 Higress 的方式与其他 REST-to-MCP 服务一致把mcp-server.yaml中的server/tools结构写入 MCP Server 插件可基于 all-in-one 插件配置并将server.config.appCode填为云市场控制台中订阅得到的 AppCode插件配置中的server.name必须与本文件中的national-bid-query完全一致网关通过该名称识别请求应路由到哪个 MCP 服务器。MCP 客户端连接后即可在工具列表中发现bid-query、bid-detail、bid-project三个工具输入参数的 JSON Schema 由args中的type/required/description自动生成生成逻辑见 rest_server.go 的InputSchema方法约 L962 起未声明type时默认string。完整的 MCP Server 实现与 REST-to-MCP 模板语法GJSON Template、Sprig 函数、uuidv4等可参阅 plugins/wasm-go/mcp-servers/README_zh.md英文版说明见同目录 README.md。需要注意的前提MCP Server 插件需要 Higress 2.1.0 或更高版本且云市场 API 的调用额度受订阅额度约束。【免费下载链接】higress AI Gateway | AI Native API Gateway项目地址: https://gitcode.com/GitHub_Trending/hi/higress创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表