我们做了可能是第一个支持了MCP服务的ERP/WMS系统?

一、前言

我们之前开发了一个 SPMS 的智能生产管理系统,其中包含了很多 资源管理(ERP) 、库存管理(WMS) 、生产管理(MES) 等功能,前段时间 MCP 在国内火了起来,我们也顺带的给这个开源管理系统加上了几个 MCP 工具的功能,可以参考之前我们发布的文章:

MCP 很火,来看看我们直接给后台管理系统上一个 MCP?

我们和目前主流的 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: github.com/s-pms

七、总结

今天我们分享了在这个开源后台管理系统上实现 MCP 的简单过程说明,也演示了实现之后的效果。

虽然目前还需要依赖各种 AI 客户端来实现,但我相信,在不久的将来,通过 Siri 小爱同学 你好宝马 都能动动嘴完成这些事情。

今天到这,Bye.

相关推荐
java资料站17 分钟前
十一、Spring AI Alibaba · 高级 · 多智能体(Multi-agent)
人工智能·spring·microsoft
全栈弄潮儿22 分钟前
Python实战第2期: 变量与数据类型
后端·python·agent
2601_9556624626 分钟前
情感解说视频如何提升感染力?配音细节很关键
人工智能·音视频·语音识别·视频
苏醒的人生29 分钟前
电商品牌物料AI生图工具推荐:让品牌调性一套到底
人工智能
lank_M34 分钟前
截图OCR预处理在普通屏上翻车,Retina截图却没事
图像处理·人工智能·计算机视觉·ocr
Aloudata34 分钟前
LookML 语义模型 vs 企业级独立语义层:BI 建模语言能否承担企业语义底座?
数据库·人工智能·数据分析·数据资产·dataagent
jyOverQ42 分钟前
JSON-RPC 2.0、Codex、MCP Client 和 MCP Server 是什么关系?以调用 GitHub 工具为例
ai·mcp
龙亘川1 小时前
AI 协同赋能城市治理:支撑政协数字化履职的技术路径探析
大数据·人工智能·智慧城市·开源软件·数据可视化
通信大模型1 小时前
IEEE TCCN | 面向低空经济网络的Agentic AI驱动多无人机轨迹优化
网络·人工智能·无人机