前言
在前面的几小节MCP Server实现示例中都需要在服务中接入MCP的实现,这样做会存在以下几个问题:
- MCP Server的实现对JDK和tomcat等都有版本要求,导致很多已有项目接入MCP存在困难;想要接入MCP Server都要写一套接入协议的代码,人力成本和时间成本投入线性增长;SSE通信方式需要维护session,项目复杂度和成本投入增大;
遇到这些问题的话,那么通过Higress来达到接入MCP的方式可以说是首选了。接下来就是实战如何部署配置Higress,并完成普通Restful接口实现MCP协议的过程。
Docker Compose配置编写
关于docker、docker-compose如何安装的问题不在此篇文章的研究范围,默认为已经安装好docker、docker-compose,下面是我们部署Higress示例的相关docker-compose.yaml配置:
version: "3"services: higress-ai: image: "higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/all-in-one:latest" ports: - "8001:8001" - "8080:8080" - "8443:8443" volumes: - "./higress:/data" higress-redis: image: "higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/redis-stack-server:7.4.0-v3" ports: - "6379:6379"
我们通过下面命令直接把容器运行起来:
docker-compose up -d
Higress McpServer配置
我们在相对路径./higress/configmaps中,找到higress-config.yaml文件,需要新增以下配置:
apiVersion: v1kind: ConfigMapmetadata: name: higress-config namespace: higress-system creationTimestamp: "2000-01-01T00:00:00Z" resourceVersion: "1"data: higress: |- # 下面为新增配置 mcpServer: # mcp server sse请求后缀,提供给mcp client访问 sse_path_suffix: /sse enable: true # 解决session共享问题,交给redis存储 redis: # redis的ip和端口,需要把$ip替换成redis的ip address: $ip:6379 # redis用户名密码,根据实际来填写 username: "" password: "" # 目标db db: 0 # 指定映射规则,符合规则的请求会转成mcp sse请求 match_list: - match_rule_domain: "*" match_rule_path: /mcp match_rule_type: "prefix" servers: []
重启Higress容器:
docker-compose restart higress-ai
上面的配置就是开启Higress Mcp Server的功能,并实现了分布式session共享,指定了相应的请求映射规则,这样的话,符合规则的请求都会按照MCP Server请求来处理,那么MCP Client就需要按照这个映射规则来配置请求MCP Server的SSE url。
测试一下服务是否启动成功,浏览器访问(云服务器需要确认8001端口是否开放):http://ip:8001/,成功后将出现Higress重置密码的界面。
准备业务服务
我们需要准备一个业务服务,比如查询天气,或者只返回hello world也行,对外提供restful接口,为了方便演示,我们做了一个Hello服务,代码如下:
@RestController public class HelloController { @GetMapping("/hello") public Map<String, String> hello() { Map<String,String> result = new HashMap<>(); result.put("text","hello"); return result;} }
然后我们把这个服务打成war包,并部署起来。要求是该Hello服务提供的接口需要能被Higress所在的网络环境访问。为了方便起见,我们同样使用docker来部署Hello服务,docker-compose配置如下:
tomcat: image: "tomcat:10-jre17" ports: - "8081:8080" volumes: - "./tomcat/webapps:/usr/local/tomcat/webapps"
通过下面命令把tomcat镜像和服务运行起来:
docker-compose up -d tomcat
tomcat服务运行起来后,我们会看到对应的文件夹也创建好了,此时webapps里面并没有任何war包。接下来我们需要把打好的war包上传到webapps文件夹里面:
上传之前先把tomcat容器停止,避免上传过程中就被自动解包:
docker-compose stop tomcat
执行上传操作:
scp xxxxx.war root@ip:xxxx/tomcat/webapps/ROOT.war
上面命令中的xxxx需要替换成war包的名称和目标路径,ip需要替换成目标服务器的ip地址,可参考scp命令指南。
上传完毕后,启动tomcat容器:
docker-compose up -d tomcat
打开浏览器测试一下服务是否启动成功(云服务器需要确定安全组开启了8080端口):http://ip:8081/hello
配置Higress,接入MCP Server Tools
配置服务来源现在我们需要在Higress上配置Hello服务,因为我们的Hello服务是单独部署的,没有接入任何注册中心,也没有配置域名,那么直接通过固定地址的方式配置:
新增路由配置
接下来就要配置路由,把用户请求路由到Hello服务上:
新增MCP Server Tools
最后我们通过配置MCP服务器插件的方式,把目标接口配置成Tools给到MCP Client:
上述配置规则可参考MCP Server 插件配置
测试
我们依然可以使用cherry studio来测试是否成功生成MCP Server:
小结
至此,我们就实现了通过Higress让普通的restful服务无痛接入MCP Server协议的能力,通过统一的服务网关接入MCP Server协议,使得业务服务与MCP协议解耦,并轻松接入MCP Server,能够最大限度地降低项目复杂性和技术难度,极大地提高了开发效率,这种架构模式必然成为趋势。在这小节中,我们主要做了以下几件事情:
1、部署Higress服务,使用redis作为session存储方案;
2、启动MCP Server配置,设置SSE匹配模式;
3、启动业务服务,开放业务接口(Hello服务);
4、配置Higress路由策略;
5、配置MCP Server Tools及服务接口;