将现有 REST API 转换为 MCP Server工具 -higress

将现有 REST API 转换为 MCP Server工具 -higress

Higress 是一款云原生 API 网关,集成了流量网关、微服务网关、安全网关和 AI 网关的功能。
它基于 Istio 和 Envoy 开发,支持使用 Go/Rust/JS 等语言编写 Wasm 插件。
提供了数十个通用插件和开箱即用的控制台。
Higress AI 网关支持多种 AI 服务提供商,如 OpenAI、DeepSeek、通义千问等,并具备令牌限流、消费者鉴权、WAF 防护、语义缓存等功能。

MCP Server 插件配置

higress

功能说明

  • mcp-server 插件基于 Model Context Protocol (MCP),专为 AI 助手设计,定义了 AI 模型与外部工具和资源交互的标准方式。
  • 功能特点:
    1. 无需编写代码:将现有 REST API 转换为 AI 助手可调用的工具。
    2. 统一认证、鉴权、限流和可观测性:利用 Higress 网关提供的能力,确保安全性和性能。
    3. 快速构建和部署:通过 Higress 插件机制,快速添加新的 MCP Server。

运行属性

  • 插件执行阶段:默认阶段
  • 插件执行优先级:30

配置字段

Server 配置

字段名数据类型填写要求默认值描述
server.namestring必填-MCP Server 的名称。如果是内置 MCP Server(如 quark-search),只需配置此字段;如果是 REST-to-MCP 场景,此字段可以自定义。
server.configobject选填{}MCP Server 配置,如 API 密钥等。
server.allowToolsarray of string选填-允许调用的工具列表。如果不指定,则允许所有工具。

REST-to-MCP 工具配置

字段名数据类型填写要求默认值描述
toolsarray of object选填[]REST-to-MCP 工具配置列表。
tools[].namestring必填-工具名称。
tools[].descriptionstring必填-工具功能描述。
tools[].argsarray of object必填[]工具参数定义。
tools[].args[].namestring必填-参数名称。
tools[].args[].descriptionstring必填-参数描述。
tools[].args[].typestring选填string参数类型(stringnumberintegerbooleanarrayobject)。
tools[].args[].requiredboolean选填false参数是否必需。
tools[].args[].defaultany选填-参数默认值。
tools[].args[].enumarray选填-参数允许的值列表。
tools[].args[].itemsobject选填-数组项的模式(当 typearray 时)。
tools[].args[].propertiesobject选填-对象属性的模式(当 typeobject 时)。
tools[].requestTemplateobject必填-HTTP 请求模板。
tools[].requestTemplate.urlstring必填-请求 URL 模板。
tools[].requestTemplate.methodstring必填-HTTP 方法(如 GETPOST 等)。
tools[].requestTemplate.headersarray of object选填[]请求头模板。
tools[].requestTemplate.headers[].keystring必填-请求头名称。
tools[].requestTemplate.headers[].valuestring必填-请求头值模板。
tools[].requestTemplate.bodystring选填-请求体模板(与 argsToJsonBodyargsToUrlParamargsToFormBody 互斥)。
tools[].requestTemplate.argsToJsonBodyboolean选填false参数直接作为 JSON 请求体(与 bodyargsToUrlParamargsToFormBody 互斥)。
tools[].requestTemplate.argsToUrlParamboolean选填false参数作为查询参数添加到 URL 中(与 bodyargsToJsonBodyargsToFormBody 互斥)。
tools[].requestTemplate.argsToFormBodyboolean选填false参数以 application/x-www-form-urlencoded 格式编码在请求体中(与 bodyargsToJsonBodyargsToUrlParam 互斥)。
tools[].responseTemplateobject必填-HTTP 响应转换模板。
tools[].responseTemplate.bodystring必填-响应体转换模板。

参数类型支持

  • 支持多种参数类型,用于更精确地定义工具参数:
    • string:字符串类型(默认)。
    • number:数字类型(浮点数)。
    • integer:整数类型。
    • boolean:布尔类型(true/false)。
    • array:数组类型,使用 items 字段定义数组元素的模式。
    • object:对象类型,使用 properties 字段定义对象属性的模式。

请求参数传递方式

  • 支持四种请求参数传递方式,这些选项是互斥的

argsToFormBody:参数以 application/x-www-form-urlencoded 格式编码在请求体中,并自动添加相应的 Content-Type 头。

requestTemplate:argsToFormBody:true

argsToUrlParam:参数作为查询参数添加到 URL 中。

requestTemplate:argsToUrlParam:true

argsToJsonBody:参数直接作为 JSON 对象发送到请求体中,并自动添加 Content-Type: application/json; charset=utf-8 头。

requestTemplate:argsToJsonBody:true

body:手动构建请求体,最灵活的方式。

requestTemplate:body:| { "query": "{{.args.query}}", "filters": {{toJson .args.filters}}, "options": { "limit": {{.args.limit}} } }

模板语法

  • 使用 GJSON Template 语法,结合了 Go 模板和 GJSON 路径语法。
  • 请求模板
    • 访问配置值:{{.config.字段名}}
    • 访问工具参数:{{.args.参数名}}
  • 响应模板
    • 使用 GJSON 路径语法访问 JSON 响应字段。
    • 使用模板函数(如 addupperlower 等)。
    • 使用控制结构(如 ifrange 等)。
  • GJSON 路径语法
    • 点表示法:address.city
    • 数组索引:users.0.name
    • 数组迭代:users.#.name
    • 数组过滤:users.#(age>=30)#.name
    • 修饰符:users.@reverse.#.name
    • 多路径:{name:users.0.name,count:users.#}
    • 转义字符:path.with\.dot

配置示例

server:name:"quark-search"config:apiKey:"xxxx"

基础配置示例:转换高德地图 API

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 

通过 MCP Server,您可以快速为 AI Agent 添加各种数据源支持,提高开发效率。任何 REST API 都可以通过简单的配置转换为 MCP Server,无需编写额外的代码。

Read more

【动态规划】打家劫舍类问题

【动态规划】打家劫舍类问题

一、按摩师 17.16. 按摩师 题目描述: 题目分析: 1、状态表示 每个预约都只会有两种选择,即选或不选。因此我们可以用  * dp[i][0] 表示不选择第 i 个预约时,最长的预约时长 * dp[i][1] 表示选择第 i 个预约时,最长的预约时长 2、状态转移方程 对于 dp[i][0] : * 如果我们选择了第 i 个预约,那么第  i-1 次预约就一定不会选择,这时我们只需要知道不选第 i-1 次预约时的最长预约时长即可,即 dp[i-1][0] 的值,再加上 num[i]  即可。

By Ne0inhk
数据结构【红黑树】

数据结构【红黑树】

红黑树 * 1.红黑树 * 1.1红黑树的定义 * 1.2红黑树的规则 * 1.3红黑树的效率: * 2.红黑树的实现 * 2.1红黑树的插入 * 2.1.1 情况1:变色 * 2.1.2 情况2:单旋+变色 * 2.1.3 情况3:双旋+变色 * 2.2红黑树的插入代码实现 * 2.3红黑树的查找 * 2.4红黑树的检查 1.红黑树 1.1红黑树的定义 红黑树是⼀棵二叉搜索树,它的每个结点增加一个存储位来表示结点的颜色,可以是红色或者黑色。 通过对任何一条从根到叶子的路径上各个结点的颜色进行约束,最长的不超过最短的2倍(近似平衡)。 1.2红黑树的规则 1.

By Ne0inhk
详解数据结构之跳表

详解数据结构之跳表

目录 跳表的定义 跳表的演化过程 跳表的优化思路 跳表如何保证效率 跳表的时间复杂度 跳表的空间复杂度 跳表的查找 跳表的插入 跳表的删除 跳表的模拟实现 跳表与平衡搜索树及哈希表的对比 跳表的定义 跳表是由William Pugh(音译为威廉·普)发明的,最早出现于他在1990年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》,跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。 跳表的演化过程 对于单链表来说,即使数据是已经排好序的,想要查询其中的一个数据,只能从头开始遍历链表,这样效率很低,时间复杂度很高,是 O(n),如下图所示。 那我们有没有什么办法来提高查询的效率呢?我们可以为链表建立一个“索引”,这样查找起来就会更快,如下图所示,我们在原始链表的基础上,每两个结点提取一个结点建立索引,我们把抽取出来的结点叫作索引层或者索引,down

By Ne0inhk
《算法闯关指南:优选算法-双指针》--03快乐数,04盛水最多的容器

《算法闯关指南:优选算法-双指针》--03快乐数,04盛水最多的容器

🔥草莓熊Lotso:个人主页 ❄️个人专栏:《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受。 🎬博主简介: 目录 前言: 03.快乐数 题目分析: 解法:(快慢指针) 算法思路: 补充知识:如何求一个数n每个位置上的数字的平方和 C++代码演示: 算法总结&&笔记展示: 04.盛水最多的容器 解法:(对撞指针) 算法思路: C++代码演示: 算法总结&&笔记展示: 前言: 聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。

By Ne0inhk