基于 Nacos + Higress 的 MCP 开发新范式,手把手教程来了!

作者:子葵

Naocs 3.0 中已经支持和 Higress 配合使用实现存量 Http 转化为 MCP 服务,3.0.1 及以上版本在支持存量转化的基础上同时支持同步 Nacos 中已经注册的原生的 MCP 服务,并在 Higress 上进行暴露,完成了对所有 Remote Server 类型的代理访问支持。

通过结合 Spring AI Alibaba,FastMCP 等框架,可以实现应用自动注册到 Nacos 中,并通过 Higress 自动将注册的应用对外暴露给 Client 侧访问。此文档从 0 到 1 完成 Higress + Nacos 配合实现 REST API 转 MCP 和透明代理暴露标准 MCP 服务。

环境准备

创建独立的 Docker 网络

lua 复制代码
docker network create mcp

Higress 部署

使用 Docker 部署 Higress。

bash 复制代码
docker run -d --rm --name higress-ai -v ${PWD}:/data \
        -p 8001:8001 -p 8080:8080 -p 8443:8443 --network mcp \
        higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/all-in-one:latest

部署 Redis。

css 复制代码
docker run -d --rm --name higress-redis -p 6379:6379 --network mcp higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/redis-stack-server:7.4.0-v3

配置 MCP Server 的全局参数。

arduino 复制代码
vi ./configmaps/higress-config.yaml

修改配置文件。

makefile 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: higress-config
  namespace: higress-system
  creationTimestamp: "2000-01-01T00:00:00Z"
  resourceVersion: "1"
data:
  higress: |-
    mcpServer:
      sse_path_suffix: /sse  # SSE 连接的路径后缀
      enable: true          # 启用 MCP Server
      redis:
        address: higress-redis:6379 # Redis服务地址。这里需要使用本机的内网 IP,不可以使用 127.0.0.1
    downstream:
    # 以下配置无需修改,此处省略

受 Docker 运行环境的限制,非 Linux 操作系统在修改 yaml 文件之后,需要等待一段时间才能让新的配置生效。如果希望立即生效的话,可以使用以下命令重启 higress-ai 容器:

Nacos 部署

通过 Docker 直接部署。

ini 复制代码
docker run --name nacos \
    -e MODE=standalone \
    -e NACOS_AUTH_TOKEN=your_token_base64 \
    -e NACOS_AUTH_IDENTITY_KEY=your_key \
    -e NACOS_AUTH_IDENTITY_VALUE=your_value \
    -p 8081:8080 \
    -p 8848:8848 \
    -p 9848:9848 \
    --network mcp \
    -d nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v3.0.1

配置 Higress 连接到 Nacos MCP Registry

在 Higress 服务来源中增加 Nacos 3.x 服务来源。

打开 Higress 控制台,部署主机地址 :8001,点击服务来源添加,并添加 Nacos3.x 服务来源,地址填写 nacos。

服务部署和验证

REST API 转 MCP

进入 Nacos 控制台,访问部署主机 ip:8081,点击 MCP Regsitry 并创建 MCP Server。

添加 Tool,Tool 名称为 get_weather,参数为 city,协议转化配置为:

json 复制代码
{
  "requestTemplate": {
    "url": "/v3/weather/weatherInfo?key=yourkey",
    "argsToUrlParam": true,
    "method": "GET"
  }
}

并发布为最新版本, 通过 sse ednpoint 直接访问 http:// 宿主机 host:8080/mcp/amap/sse。

在 3.0.0 基础上,3.0.1 支持在模版中引用 Nacos 配置,并且可以通过动态修改配置实现对模版的动态控制。

通过 Nacos 动态配置能力,动态更新模版中的值,动态轮转后端访问 token,动态控制网关访问后端服务的参数。

新建配置文件 amap_key,分组为 data 的配置,配置内容为:

json 复制代码
{
  "data": "your_key"
}

并在模板中直接进行引用。

保存为最新版本,通过上面的 endpoint 进行访问。

访问成功,修改配置中的 key 的值为非法值。

访问失败。

通过 Spring AI Alibaba 实现自动注册和自动暴露到 Higress

克隆 sping ai alibaba examples 仓库。

bash 复制代码
git clone https://github.com/springaialibaba/spring-ai-alibaba-examples.git

进入 nacos mcp example 目录。

bash 复制代码
cd ./spring-ai-alibaba-examples/spring-ai-alibaba-mcp-example/spring-ai-alibaba-mcp-nacos-example/server/mcp-nacos-registry-example

修改配置文件中 Nacos 的用户名密码为自己设置的用户名和密码。

css 复制代码
vi ./src/main/resources/application.yml

启动项目。

arduino 复制代码
mvn spring-boot:run

启动之后,在 Nacos 中查看注册的 MCP 服务。

Higress 会自动发现注册的 MCP 服务并产生透明代理规则,可以直接通过 Higress 访问 MCP 服务。通过 inspector 应用调试通过 Higress 暴露的 MCP 服务。

总结

在新版本的 Higress 和 Nacos 中,Higress 通过 Nacos 做统一发现实现存量应用的零改造适配 MCP 协议,并且能够实现 MCP 服务的自动代理,Higress 作为 MCP 网关对外提供统一的 MCP 暴露,Nacos 作为 MCP Regsitry 对 MCP 服务做统一管理,对外提供统一的服务发现、动态变更等能力。

相关推荐
孟婆来包棒棒糖~7 小时前
SpringCloude快速入门
分布式·后端·spring cloud·微服务·wpf
她说..10 小时前
MybatisPlus-快速入门
java·spring boot·spring cloud·微服务·mybatis·mybatisplus
java叶新东老师15 小时前
七、搭建springCloudAlibaba2021.1版本分布式微服务-skywalking9.0链路追踪
分布式·微服务·架构
null不是我干的17 小时前
基于黑马教程——微服务架构解析(二)
微服务·云原生·架构
喵叔哟21 小时前
30.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--公共代码--用户上下文会话
微服务·架构·.net
GEM的左耳返1 天前
Java面试全攻略:Spring生态与微服务架构实战
spring boot·redis·spring cloud·微服务·kafka·java面试
你的人类朋友1 天前
❤️‍🔥微服务的拆分策略
后端·微服务·架构
angushine1 天前
logstash采集springboot微服务日志
spring boot·微服务·linq
null不是我干的1 天前
基于黑马教程——微服务架构解析(一)
java·微服务·架构