Higress 作为云原生 API 网关,除了常规的流量治理,在 AI 领域也有独特优势。它基于 Istio 和 Envoy 开发,允许开发者使用 Go、Rust 或 JS 编写 Wasm 插件,并提供了开箱即用的控制台。特别是其 AI 网关能力,支持 OpenAI、DeepSeek 等多种服务,具备令牌限流、鉴权和语义缓存等功能。
今天重点聊聊如何用 Higress 的 MCP Server 插件,把现有的 REST API 快速变成 AI 助手能调用的工具。
核心能力
MCP(Model Context Protocol)定义了 AI 模型与外部工具交互的标准。借助 Higress 的这个插件,你不需要写一行业务代码,就能完成以下工作:
- 零代码转换:直接把 REST API 暴露给 AI 调用。
- 统一治理:复用网关的认证、鉴权、限流和可观测性能力,保障安全。
- 快速部署:通过插件机制动态添加新的 MCP Server。
插件默认在标准阶段执行,优先级设为 30。
配置详解
配置主要分为 Server 基础信息和具体的 REST-to-MCP 工具定义。
Server 基础配置
| 字段名 | 类型 | 必填 | 描述 |
|---|---|---|---|
server.name | string | 是 | MCP Server 名称。内置服务如 quark-search 只需填这个;REST 场景可自定义。 |
server.config | object | 否 | 扩展配置,比如 API 密钥等。 |
server.allowTools | array | 否 | 允许调用的工具白名单,不填则全开。 |
工具定义 (REST-to-MCP)
这是最关键的部分,你需要告诉网关如何构造 HTTP 请求以及如何解析返回结果。
| 字段名 | 类型 | 必填 | 描述 |
|---|---|---|---|
tools | array | 否 | 工具列表。 |
tools[].name | string | 是 | 工具名称。 |
tools[].description | string | 是 | 工具的功能描述,AI 会据此理解何时调用。 |
tools[].args | array | 是 | 参数定义列表。 |
tools[].requestTemplate | object | 是 | HTTP 请求模板。 |
tools[].responseTemplate | object | 是 | 响应转换模板。 |
参数类型支持 string、number、integer、boolean、array 和 object。对于数组或对象,可以通过 items 或 properties 进一步定义结构。
请求与响应模板
这里使用了 GJSON Template 语法,结合了 Go 模板和 GJSON 路径。
请求参数怎么传? 有四种互斥的方式,根据后端接口需求选择:
- 表单提交:
argsToFormBody,自动加application/x-www-form-urlencoded头。 - URL 参数:
argsToUrlParam,拼接到 URL 后面。 - JSON Body:
argsToJsonBody,自动加application/json头。 - 手动构建:
body,最灵活,适合复杂场景。
例如手动构建 JSON 请求体:
requestTemplate:
body: |
{
"query": "{{.args.query}}",
"filters": {{toJson .args.filters}},
"options": { "limit": {{.args.limit}} }
}
注意这里的 {{.args.xxx}} 是访问工具传入的参数,{{toJson ...}} 用于序列化对象。
响应怎么处理?
同样用 GJSON 路径访问返回的 JSON 字段,配合模板函数(如 add、upper)和控制结构(if、range)进行清洗。
实战示例
1. 内置服务配置
如果是像 quark-search 这样的内置 MCP Server,配置很简单:
server:
name: "quark-search"
config:
apiKey: "xxxx"
2. 转换高德地图 API
下面是一个将高德地理编码接口转换为 MCP 工具的完整配置。你可以看到如何通过 args 定义输入,再通过 requestTemplate 映射到 GET 请求。
server:
name: rest-amap-server
config:
apiKey: your-api-key-here
tools:
- name: maps-geo
description: "将结构化地址转换为经纬度坐标,支持地标解析"
args:
- name: address
description: "待解析的结构化地址信息"
type: string
required: true
- name: city
description: "指定查询的城市"
type: string
required: false
- name: output
description: "输出格式"
type: string
enum: ["json", "xml"]
default: "json"
requestTemplate:
url: "https://restapi.amap.com/v3/geocode/geo"
method: GET
通过这个配置,AI Agent 就能直接调用这个工具获取地理位置信息,而无需你再去写适配层代码。这种模式极大地降低了 AI 应用接入外部数据的门槛。

