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

一、前言

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

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

我们和目前主流的 STDIO 模式的 MCP 工具不一样,我们使用的是 MCPSSE/HTTP 模式,所以本文不涉及 STDIO 模式的 MCP 的实现和内容。

今天我们来聊聊这些实现中的细节:

二、实现思路

我们在 MCPSSE/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.

相关推荐
eternal__day8 分钟前
MyBatis-Plus 详解:快速上手到深入理解
java·spring boot·后端·spring·java-ee·maven·mybatis
火山引擎边缘云10 分钟前
2025 全球分布式云大会演讲实录 | 沈建发:智启边缘,畅想未来:边缘计算新场景落地与 Al 趋势新畅想
人工智能·llm·边缘计算
radient12 分钟前
线上CPU飙升问题如何排查 - Java版
后端
AIGC-Lison14 分钟前
AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
人工智能·ai作画·stable diffusion·midjourney·sd
AronTing15 分钟前
享元模式:如何通过对象共享实现亿级系统的内存优化
后端·设计模式
Java中文社群21 分钟前
超实用!用FunctionCall实现快递AI助手
java·人工智能·后端
Blockchain24 分钟前
从头开始使用 Go 构建 Orchestrator(第 六部分:指标)
后端·kubernetes
赛博丁真Damon27 分钟前
写个MCP服务让Cursor帮我去找SVG图标(iconfont)【入门】
cursor·mcp
iOS开发上架哦27 分钟前
mobileconfig文件ios怎么安装
后端
Blockchain28 分钟前
从头开始使用 Go 构建 Orchestrator(第五部分:Worker 的 API)
后端·kubernetes