我们做了可能是第一个支持了MCP服务的ERPWMS系统?
??金石瓜分计划回归,戳上图了解详情??)一、前言我们之前开发了一个「SPMS」的智能生产管理系统,其中包含了很多「资源管理(ERP)」、「库存管理(WMS)」、「生产管理(MES)」等功能,前段时间「MCP」在国内火了起来,我们也顺带的给这个开源管理系统加上了几个「MCP」工具的功能,可以参考之前我们发布的文章:
MCP 很火,来看看我们直接给后台管理系统上一个 MCP?
https://juejin.cn/post/7481491253499969575
?我们和目前主流的「STDIO」模式的「MCP」工具不一样,我们使用的是「MCP」的「SSE/HTTP」模式,所以本文不涉及「STDIO」模式的「MCP」的实现和内容。
?今天我们来聊聊这些实现中的细节:
二、实现思路我们在「MCP」的「SSE/HTTP」模式下,「MCP」服务端会主动向客户端推送消息,所以「MCP」服务端需要实现一个「SSE/HTTP」的端点。这个端点只是在告诉客户端,我们提供了这么个接入的地址,SSE在初次连接时,会推送一个「POST」接受客户端请求的地址。
2.1 实现「SSE/HTTP」控制器因为我们使用的是「SpringBoot」,所以「MCP」服务端只需要实现一个「Controller」即可。
「我们在这个控制器中做了这些设计:」
2.1.1 创建 SSE 端点用于客户端连接,并推送初始化的一条信息告诉客户端,我们可以通过什么地址接受消息。
2.1.2 创建 HTTP 端点用于接受客户端的数据,处理完毕之后的数据通过上面的「SSE」端点推送给客户端。
2.1.3 创建一个身份令牌的「MAP」这个「MAP」的作用是,用来存储客户端的「AccessToken」,这个「AccessToken」是客户端在当前系统中申请的私人令牌,用于身份验证以及功能的授权。
如上,我们可以创建一个身份令牌,用于客户端侧的使用。
我们可以和上面一样,为指定的用户授权某些「MCP」工具的使用权限。
这里我们配合之前设计的拦截器,实现了身份验证和权限校验等。
三、实现「McpService」而具体的细节,被我们藏在了
「McpService」这个类里面:
其中,我们完成了下面这些部分的功能:
3.1 扫描「MCP」工具我们通过初始化的时候调用scanMcpMethods进行扫描标记了@McpMethod注解的方法,并注册到权限列表中以提供给上面身份令牌的用户所在角色授权使用。
同时,扫描到的工具列表也将在客户端调用tools/list时放回给支持「MCP」的客户端。
3.2 执行「MCP」工具我们通过传入的methodName从上面的「MCP工具中」获取到工具,然后再通过反射去调用这个工具当时被扫描时的方法,执行方法后返回结果给到客户端。
当然,在调用工具前,我们通过对身份令牌的权限做验证来保证所有的「MCP工具」都在合理授权的情况下被调用。
3.3 SSE 推送消息因为这里是「POST」请求过来的,「MCP协议」要求结果不通过response返回,而是通过「SSE」推送消息给客户端。
所以我们实现了这些 推送消息 的功能。
四、使用「MCP客户端」我们演示通过「CherryStudio」
配置这个「MCP服务」
如图,我们在「CherryStudio」中添加了「MCP」服务器,并配置了「SSE」模式下的「MCP」服务器的地址。
?这个地址是从我们后台系统中获取的:
?其中,身份令牌就是上面提到的。
五、测试服务我们先给大家看看这个创建采购单的后端实现吧:
很简单。
接下来,我们通过「创建采购单」这个工具来测试一下「MCP」服务器是否正常。
5.1 未授权情况
不好意思啊兄弟们,不是我不采购,是没权限。
?5.2 授权使用工具后还行吗兄弟们?
六、完整代码所有的代码都是开源的,可以参考这个开源项目:
Github: https://github.com/s-pms
七、总结今天我们分享了在这个开源后台管理系统上实现「MCP」的简单过程说明,也演示了实现之后的效果。
虽然目前还需要依赖各种「AI」客户端来实现,但我相信,在不久的将来,通过「Siri」「小爱同学」「你好宝马」都能动动嘴完成这些事情。
今天到这,Bye.
关注更多AI编程资讯请去AI Coding专区:https://juejin.cn/aicoding
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线