mcp服务器和主服务器不在一个端口时,解决mcp服务器重启后的初始化
每次mcp服务器进行初始化时,会先通过这个接口通知主服务器,主服务器从数据库中拿到mcp配置,之后逐个调用mcp服务器的接口配置工具。同时这需要两个服务器要同时操作一个数据库,而在实际情况下,mcp服务器和主服务器运行在两台不同的服务器上,可能会导致问题。主服务器并不知道mcp服务器是否已经开始监听,我的做法是在接收到mcp服务器的请求后强行等待0.1s再执行对mcp服务器的请求,但是如果在mcp
1.场景描述:
课内项目遇到这样一个场景:一个AI聊天项目,现在想通过mcp为每个智能体拓展工具。处理mcp的连接、筛选工具、调用工具等逻辑运行在一个端口,处理主要业务的服务器运行在另一个端口。现在当mcp服务重启时,不会从数据库拉取工具的配置信息,从而导致之前存入的mcp全部失效。
2.解决思路:
简单粗暴的,在mcp服务器也内置一个数据库连接,每次重启时都去拉取工具配置,将工具信息配进服务器内。但这样依然存在两个问题:当mcp服务重启时,主服务器无法被通知到。同时这需要两个服务器要同时操作一个数据库,而在实际情况下,mcp服务器和主服务器运行在两台不同的服务器上,可能会导致问题。
最终采用的方法是在主服务器增加一个通知mcp服务器初始化的接口。每次mcp服务器进行初始化时,会先通过这个接口通知主服务器,主服务器从数据库中拿到mcp配置,之后逐个调用mcp服务器的接口配置工具。每个工具配置完成后,主服务器会尝试获取其工具列表,如果获取失败则代表没配置成功,主服务器重试,重试超过三次后会将失败的工具存入失败列表。
当全部工具配置完成后,正常情况下则直接响应。如果有配置失败的工具,则在数据库内修改他的enable状态,至此初始化完成。
3.存在问题:
主服务器并不知道mcp服务器是否已经开始监听,我的做法是在接收到mcp服务器的请求后强行等待0.1s再执行对mcp服务器的请求,但是如果在mcp服务器发送请求后突然挂掉,那么配置依旧是失败的,主服务器依旧无法感知,并且会持续执行其他的mcp配置。
更多推荐


所有评论(0)