深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
一、MCP架构概述
MCP(Model Context Protocol)是一种面向智能服务和多模型协作的系统架构。它通过分层设计,将系统分为 MCP Client、MCP Host 和 MCP Server 三大核心组件,实现了灵活的服务编排、上下文管理和智能路由,极大提升了AI平台和复杂业务系统的灵活性与智能化水平。
二、MCP三大核心组件详解
1. MCP Client
- 定义:请求的发起方,通常是用户界面、Web前端、移动App或命令行工具。
- 职责:
- 收集用户输入,向 Host 发起请求。
- 展示结果给用户。
- 举例:用户在网页上输入“请通知张三审批”,Client 负责收集输入并通过 Host 发送到 Server,最后展示结果。
2. MCP Host
- 定义:系统的“中枢大脑”,负责协调、调度、路由和编排。
- 职责:
- 管理上下文、会话、权限、服务能力元数据。
- 根据业务需求和服务能力,智能选择合适的 MCP Server。
- 支持多服务编排、结果汇总、错误处理等。
- 举例:Host 收到“多渠道通知”请求后,自动拆解为邮件、短信、钉钉三种子任务,分发给不同Server并汇总结果。
3. MCP Server
- 定义:实际执行任务的后端服务。
- 职责:
- 处理具体的业务逻辑或模型推理。
- 返回处理结果给 Host 或 Client。
- 声明自己的能力和特性(如支持单人/群发、最大并发等)。
- 举例:一个Server专门负责钉钉通知,另一个Server负责邮件通知。
三、MCP与传统RPC+注册中心的对比
方面 | MCP 架构 | RPC + 注册中心 |
---|---|---|
Host/Registry职责 | Host负责上下文、会话、权限、编排 | 注册中心只负责服务注册与发现 |
上下文传递 | 支持复杂上下文和会话管理 | 通常只传递参数和返回值 |
业务编排 | 支持多服务/多模型智能编排 | 主要是点对点或链式调用 |
灵活性 | 适合AI/多模型/多会话场景 | 适合传统微服务 |
流程图对比:
MCP 架构:
RPC + 注册中心:
四、上下文管理与权限校验
1. 上下文管理
- 定义:上下文是指当前操作所依赖的相关信息集合,包括用户身份、会话ID、历史操作、权限、业务参数、环境变量等。
- 钉钉通知场景举例:
- 上下文包括:项目code、token、通知内容、收件人、业务来源、请求时间等。
- 这些信息用于权限校验、日志记录、业务判断等。
示例上下文结构:
{
"projectCode": "abc123",
"token": "xxxx",
"notifyType": "dingtalk",
"content": "有新的审批单需要处理",
"toUser": ["zhangsan", "lisi"],
"triggeredBy": "审批流",
"requestTime": "2024-06-01T10:00:00"
}
2. 权限校验
- 推荐做法:在 MCP Host 层做权限校验,维护允许的项目code、token等信息。
- 流程:
- Client/大模型发起“发钉钉通知”请求,带上项目 code、token 等。
- Host 校验权限。
- 校验通过,Host 转发请求给 MCP Server。
- MCP Server 执行通知并返回结果。
伪代码:
if (!isValidProjectCode(request.projectCode) || !isValidToken(request.token)) {
return "权限校验失败";
}
forwardToDingTalkServer(request);
- 日志记录:钉钉通知的发送日志一般由 MCP Server 负责记录,Host 只需记录请求转发和结果,便于全链路追踪。
五、MCP Host的智能服务选择与动态路由
1. 传统硬编码方式
- Host 维护服务能力表,根据参数(如收件人个数)用代码判断选择哪个Server。
伪代码:
if (recipients.size() == 1) {
callServerA(request); // 只支持单人
} else {
callServerB(request); // 支持多人
}
2. 大模型/AI辅助决策
- Host 可集成大模型,让AI根据请求内容和服务能力自动推理最优选择。
伪代码:
String prompt = "A: 只支持单人发送; B: 支持群发; 当前收件人:" + recipients;
String decision = llm.call(prompt);
if (decision.contains("A")) callServerA(request);
else if (decision.contains("B")) callServerB(request);
3. 服务能力注册与元数据
- 每个 MCP Server 在注册到 Host 时,声明自己的能力(如支持单人/多人、最大人数等)。
- Host 维护一份“服务能力表”或“服务元数据”,路由时智能匹配。
能力元数据示例:
[
{
"serverId": "A",
"type": "dingtalk",
"maxRecipients": 1
},
{
"serverId": "B",
"type": "dingtalk",
"maxRecipients": 100
}
]
六、智能编排实战:多渠道通知
1. 场景描述
- 用户或业务系统发起一个“多渠道通知”请求,需要同时通过邮件、短信、钉钉三种方式通知目标用户。
- 系统有3个 MCP Server,分别负责邮件、短信、钉钉的发送。
2. Host 智能编排流程
- Host 接收请求,智能拆解为3个子任务。
- 并发或顺序调用各个 MCP Server。
- 汇总所有结果,统一反馈给请求方。
- 可根据业务规则处理部分失败、重试等。
流程图:
伪代码:
public NotificationResult sendMultiChannelNotification(NotificationRequest req) {
Future<Result> emailResult = asyncCall(emailServer, req);
Future<Result> smsResult = asyncCall(smsServer, req);
Future<Result> dingtalkResult = asyncCall(dingtalkServer, req);
// 等待所有结果
Result email = emailResult.get();
Result sms = smsResult.get();
Result dingtalk = dingtalkResult.get();
// 汇总
NotificationResult result = new NotificationResult();
result.setEmailStatus(email.getStatus());
result.setSmsStatus(sms.getStatus());
result.setDingtalkStatus(dingtalk.getStatus());
return result;
}
七、MCP架构的优势与适用场景
- 灵活性:支持不同能力的服务动态扩展,Host可根据业务需求灵活编排。
- 智能性:可集成大模型,实现复杂业务场景下的智能决策和服务选择。
- 可维护性:服务能力变更只需更新注册信息,无需改动Host核心逻辑。
- 适用场景:AI平台、多模型协作、复杂业务流、智能对话系统、消息推送平台等。
八、技术栈参考
- Spring Boot 3.3.2
- Spring Data Redis 3.3.2
- Redisson 3.24.3
- FastJSON2 2.0.47
- Java 17+
九、总结
MCP架构通过Host实现了智能服务编排、上下文管理和动态路由,极大提升了系统的灵活性和智能化水平。无论是AI平台、多模型协作,还是复杂业务流,MCP都能提供强大的支撑能力。Host既可以用传统硬编码实现路由,也可以集成大模型实现更智能的决策,是未来智能服务平台的重要基础架构之一。