McpTool服务接入
本文档旨在帮助 mcpTool 服务接入到 Apache ShenYu 网关。Apache ShenYu 网关使用 mcpServer 插件来接入 mcpTool 服务。
接入前,请正确启动 shenyu-admin,并开启mcpServer插件,在网关端和mcpTool服务端引入相关依赖。可以参考前面的 McpServer快速开始。
应用客户端接入的相关配置请参考:客户端接入配置。
数据同步的相关配置请参考:数据同步配置。
在网关中引入 mcpServer 和相关 proxy 插件#
- 在网关的
pom.xml文件中增加如下依赖:
<!--Mcp Server Plugin Start--> <dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-mcp-server</artifactId> <version>${project.version}</version> </dependency> <!--Mcp Server Plugin end-->mcpTool接入网关#
可以参考:shenyu-examples-mcp
SpringBoot用户- 在你的
mcpTool服务中的pom.xml文件 新增如下依赖:
<dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-client-mcp</artifactId> <version>${shenyu.version}</version></dependency>- 在 application.yaml 增加如下配置:
shenyu: register: registerType: http #zookeeper #etcd #nacos #consul serverLists: http://localhost:9095 #localhost:2181 #http://localhost:2379 #localhost:8848 props: username: admin password: 123456 client: mcp: props: contextPath: /mcp appName: mcp- 在你的
Spring用户在你的
http服务中的pom.xml文件 新增如下依赖:<dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-client-mcp</artifactId> <version>${shenyu.version}</version></dependency>并在你的
bean定义的xml文件中新增如下:<bean id="clientConfig" class="org.apache.shenyu.register.common.config.PropertiesConfig"> <property name="props"> <map> <entry key="contextPath" value="/你的contextPath"/> <entry key="appName" value="你的名字"/> </map> </property></bean> <bean id="shenyuRegisterCenterConfig" class="org.apache.shenyu.register.common.config.ShenyuRegisterCenterConfig"> <property name="registerType" value="http"/> <property name="serverList" value="http://localhost:9095"/></bean> <bean id="shenyuClientRegisterRepository" class="org.apache.shenyu.client.core.register.ShenyuClientRegisterRepositoryFactory" factory-method="newInstance"> <property name="shenyuRegisterCenterConfig" ref="shenyuRegisterCenterConfig"/> </bean> <bean id ="McpServiceEventListener" class ="org.apache.shenyu.client.mcp.McpServiceEventListener"> <constructor-arg name="clientConfig" ref="clientConfig"/> <constructor-arg name="shenyuClientRegisterRepository" ref="shenyuClientRegisterRepository"/> <constructor-arg name="env" ref="environment"/> </bean>在你的
controller的接口上加上@ShenyuMcpTool注解。你需要将
@ShenyuMcpTool注解加到Controller类上面,只有添加了@ShenyuMcpTool的Controller才会被识别为 mcpTool。
示例一
下面演示的是 McpTool 完整配置,你可以通过注解完全自定义你的配置,其中 parameter 信息也可以在 operation 中配置。
@GetMapping("/findById")@ShenyuMcpTool( operation = @Operation( method = "GET", description = "find order by id" ), requestConfig = @ShenyuMcpRequestConfig( bodyToJson = "false", headers = { @ShenyuMcpHeader(key = "aaa", value = "bbb") } ), enabled = true, toolName = "findOrderById")@ApiDoc(desc = "findById")public OrderDTO findById(@ShenyuMcpToolParam( parameter = @Parameter( name = "id", in = ParameterIn.PATH, description = "the id of order", required = true, schema = @Schema( type = "string", defaultValue = "1" ) )) @RequestParam("id") final String id) { OrderDTO dto = new OrderDTO(); dto.setId(id); return dto; }示例二
下面表示的是:McpTool 函数没有参数时的配置。
@GetMapping("/findAll")@ShenyuMcpTool( operation = @Operation( method = "GET", description = "find all order" ), requestConfig = @ShenyuMcpRequestConfig( bodyToJson = "false", headers = { @ShenyuMcpHeader(key = "aaa", value = "bbb") } ), enabled = true, toolName = "findAllOrder")@ApiDoc(desc = "findAll")public String findAll() { return "hello apache shenyu , mcp findAll success"; }示例三:这是一种简化的使用方式,只需要一个简单的注释即可将McpTool注册到网关.
特别说明:目前只支持
@RequestMapping、@GetMapping、@PostMapping、@DeleteMapping、@PutMapping注解,并且只对@XXXMapping中的第一个路径有效
@GetMapping("/findByName")@ShenyuMcpTool@ApiDoc(desc = "findName")public OrderDTO findByName(@ShenyuMcpToolParam final String name) { OrderDTO dto = new OrderDTO(); dto.setName(name); return dto; }- 启动你的项目,你的服务接口接入到了网关,进入
shenyu-admin后台管理系统的插件列表 -> http process -> mcpServer,看到自动创建的 endpoint 和 Tool。
McpTool 接入网关(其他语言,非springMvc体系)#
首先在
shenyu-admin找到mcpServer插件,进行选择器,和规则的添加,进行流量的匹配筛选。如果不懂怎么配置,请参考 选择器和规则管理。
用户请求#
当你的McpTool服务接入到Apache ShenYu网关后,你就可以用 selector 上配置的 endPoint 作为 mcpClient 的请求接口。
第一点,你之前
endPoint的域名是你自己的服务,现在要换成网关的域名。第二点,
Apache ShenYu网关需要有一个路由前缀,这个路由前缀就是你接入项目进行配置contextPath。在 McpServer 插件中,这个
contextPath就是你的endPoint比如你配置了
contextPath为mcp,那么你的endPoint应该配置为http://localhost:9195/mcp/sse或者http://localhost:9195/mcp/streamablehttp。其中
localhost:9195为网关的ip端口,默认端口是9195,/mcp是你接入网关配置的contextPath。
第三点,
mcpServer插件并不包含请求转发的功能,需要进行工具远程调用请启动相关的proxy插件进行插件代理。可以参考McpServer快速开始。
然后你就可以通过mcpClient进行工具调用了。