我们做了可能是第一个支持了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.

相关推荐
惜鸟4 分钟前
# LLM统一网关:LiteLLM 详细介绍(实践篇)
后端·openai
三花AI4 分钟前
ComfyUI 子工作流功能:一次编辑全局更新
人工智能
大模型铲屎官6 分钟前
【深度学习-Day 23】框架实战:模型训练与评估核心环节详解 (MNIST实战)
人工智能·pytorch·python·深度学习·大模型·llm·mnist
Elastic 中国社区官方博客8 分钟前
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索·aws
Jamence15 分钟前
多模态大语言模型arxiv论文略读(106)
论文阅读·人工智能·语言模型·自然语言处理·论文笔记
caig00024 分钟前
稳定币的深度剖析与展望
人工智能·区块链
反向跟单策略26 分钟前
期货反向跟单运营逻辑推导思路
大数据·人工智能·数据分析·区块链
RainbowJie143 分钟前
Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
spring boot·后端·单元测试
suke1 小时前
MinIO社区版"挥刀自宫":Web管理功能全砍,社区信任岌岌可危
后端·程序员·开源
美团技术团队1 小时前
可信实验白皮书系列04:随机轮转实验
后端